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

Bagaimana untuk Memisahkan Rentetan dengan Cekap dengan Pembatas Pilihan dalam T-SQL?

DDD
DDDasal
2025-01-08 09:41:421034semak imbas

How to Efficiently Split Strings with Optional Delimiters in T-SQL?

Mengendalikan pemisahan rentetan dengan atau tanpa pembatas dalam T-SQL

Pertanyaan SQL selalunya memerlukan memanipulasi rentetan dan mengekstrak bahagian tertentu berdasarkan pembatas. Walau bagaimanapun, pengendalian situasi di mana pembatas mungkin hilang atau pilihan memerlukan perancangan yang teliti.

Dalam senario yang diberikan, tugasnya adalah untuk memisahkan lajur rentetan yang mengandungi nama (nama pertama dan nama keluarga) yang dipisahkan dengan aksara '/'. Kod pada mulanya menganggap bahawa semua baris mengandungi pembatas, tetapi ralat berlaku untuk baris yang tidak.

Untuk menangani masalah ini dengan cekap, kami boleh melaksanakan pengubahsuaian berikut:

<code class="language-sql">SELECT 
    CASE 
        WHEN CHARINDEX('/', myColumn) = 0 THEN myColumn
        ELSE SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn) - 1)
    END AS FirstName,
    CASE 
        WHEN CHARINDEX('/', myColumn) = 0 THEN NULL
        ELSE SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, LEN(myColumn))
    END AS LastName
FROM MyTable;</code>

Kod yang diubah suai ini menggunakan pernyataan CASE untuk menyemak sama ada aksara '/' wujud (jika ia tidak wujud, CHARINDEX('/') mengembalikan 0). Jika ditemui, rentetan dipecahkan seperti yang dijangkakan, sebaliknya, ia menganggap keseluruhan rentetan sebagai nama pertama dan menetapkan nama akhir kepada NULL.

Dengan menambahkan logik ini, pertanyaan menjadi mantap dan boleh mengendalikan baris dengan dan tanpa pembatas, memberikan output yang diingini:

FirstName LastName
John Smith
Jane Doe
Steve NULL
Bob Johnson

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan dengan Cekap dengan Pembatas Pilihan dalam T-SQL?. 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