Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Rentetan dalam T-SQL Menggunakan Pembatas?

Bagaimana untuk Memisahkan Rentetan dalam T-SQL Menggunakan Pembatas?

Barbara Streisand
Barbara Streisandasal
2025-01-08 09:37:45623semak imbas

How to Robustly Split Strings in T-SQL Using Delimiters?

Pecah rentetan T-SQL: bijak mengendalikan pembatas yang hilang

Memisahkan rentetan berdasarkan pembatas boleh menjadi rumit dalam T-SQL, terutamanya apabila pembatas tiada dalam beberapa baris. Artikel ini menyediakan kaedah yang lebih baik untuk menyelesaikan masalah ini.

Andaikan data adalah seperti berikut:

<code>John/Smith
Jane/Doe
Steve
Bob/Johnson</code>

Kod asal:

Kod berikut cuba memisahkan data tetapi gagal apabila pembatas tiada:

<code>SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName,
       SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, 1000) AS LastName
FROM MyTable</code>

Kod yang dipertingkatkan:

Untuk mengendalikan kes pembatas hilang, kita boleh menggunakan ungkapan KES berikut:

<code>SELECT SUBSTRING(myColumn, 1, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn)
            ELSE CHARINDEX('/', myColumn) - 1
            END) AS FirstName
    ,SUBSTRING(myColumn, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn) + 1
            ELSE CHARINDEX('/', myColumn) + 1
            END, 1000) AS LastName
FROM MyTable</code>

Penerangan:

  • Ekspresi CASE menyemak sama ada pembatas (/) wujud.
  • Jika ada, ungkapan mengira panjang FirstName dan LastName berdasarkan kedudukan pembatas.
  • Jika tidak hadir, ungkapan akan menggunakan keseluruhan panjang rentetan sebagai Nama Pertama dan menetapkan Nama Akhir kepada NULL.

Kod ini akan menghasilkan hasil yang dijangkakan:

<code>FirstName---LastName
John--------Smith
Jane--------Doe
Steve-------NULL
Bob---------Johnson</code>

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan dalam T-SQL Menggunakan Pembatas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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