Rumah > pangkalan data > tutorial mysql > Bagaimana Mengendalikan Pembatas yang Hilang Apabila Memisahkan Rentetan dalam T-SQL?

Bagaimana Mengendalikan Pembatas yang Hilang Apabila Memisahkan Rentetan dalam T-SQL?

Susan Sarandon
Lepaskan: 2025-01-08 09:47:42
asal
209 orang telah melayarinya

How to Handle Missing Delimiters When Splitting Strings in T-SQL?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Pertanyaan diperhalusi ini menggunakan CASE untuk mengendalikan kedua-dua senario:

  • Pembatas Tidak Hadir (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.
  • Hadir Pembatas: Logik 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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan