Pemisahan Rentetan T-SQL: Menangani Pembatas Hilang
Data dengan pembatas yang tidak konsisten memerlukan pengendalian yang mantap bagi senario pembatas yang hilang. Mari kita periksa masalah biasa:
Bayangkan jadual ("MyTable") dengan lajur "Nama" menyimpan nama dalam format FirstName/LastName
. Walau bagaimanapun, sesetengah entri mungkin tidak mempunyai pembatas '/':
<code>FirstName---LastName John--------Smith Jane--------Doe Steve-------NULL -- Missing delimiter Bob---------Johnson</code>
Pendekatan SUBSTRING
dan CHARINDEX
naif seperti ini gagal apabila pembatas tiada:
<code class="language-sql">SELECT SUBSTRING(Name, 1, CHARINDEX('/', Name)-1) AS FirstName, SUBSTRING(Name, CHARINDEX('/', Name) + 1, 1000) AS LastName FROM MyTable;</code>
Ralat "Parameter panjang tidak sah dihantar ke fungsi LEFT atau SUBSTRING" timbul kerana CHARINDEX
mengembalikan 0 apabila pembatas tidak ditemui, membawa kepada panjang subrentetan negatif.
Penyelesaian: Pengekstrakan Substring Bersyarat
Penyelesaian melibatkan pernyataan CASE
untuk menentukan panjang subrentetan secara bersyarat:
<code class="language-sql">SELECT SUBSTRING(Name, 1, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) ELSE CHARINDEX('/', Name) - 1 END) AS FirstName, SUBSTRING(Name, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX('/', Name) + 1 END, 1000) AS LastName FROM MyTable;</code>
Pertanyaan diperhalusi ini menggunakan CASE
untuk mengendalikan kedua-dua senario:
CHARINDEX('/') = 0
): Panjang subrentetan untuk FirstName
menjadi keseluruhan panjang rentetan (LEN(Name)
), dan subrentetan LastName
bermula pada kedudukan satu aksara melepasi penghujung daripada rentetan (LEN(Name) 1
), dengan berkesan mengembalikan NULL
.SUBSTRING
asal digunakan.Pendekatan teguh ini menjamin hasil yang betul tanpa mengira kehadiran pembatas, menghalang ralat "Parameter panjang tidak sah".
Atas ialah kandungan terperinci Bagaimana Mengendalikan Pembatas yang Hilang Apabila Memisahkan Rentetan dalam T-SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!