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

Bagaimana untuk Memisahkan Rentetan dengan Selamat dalam T-SQL Menggunakan Pembatas?

Linda Hamilton
Linda Hamiltonasal
2025-01-08 09:52:41309semak imbas

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

Pisah rentetan berdasarkan pembatas dalam T-SQL

Soalan:

Dalam SQL, menggunakan SUBSTRING untuk memisahkan rentetan berdasarkan pembatas mungkin menyebabkan ralat apabila pembatas tidak wujud. Kod di bawah menunjukkan ini:

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

Apabila baris tanpa pembatas ditemui, ia melemparkan ralat: "Argumen panjang yang dihantar ke fungsi LEFT atau SUBSTRING adalah tidak sah."

Penyelesaian:

Untuk menyelesaikan masalah ini, anda boleh menggunakan pernyataan CASE dalam fungsi SUBSTRING seperti berikut:

<code class="language-sql">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>
Kod yang dikemas kini ini menggunakan CHARINDEX untuk menilai kedudukan pembatas. Jika pembatas tidak ditemui (CHARINDEX mengembalikan 0), pernyataan CASE menggunakan panjang rentetan untuk memastikan keseluruhan rentetan dianggap sebagai nama. Jika pembatas hadir, ia mengira kedudukan aksara pertama selepas pembatas sebagai indeks permulaan nama akhir.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan dengan Selamat 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