Bagaimana cara memisahkan String dengan Char yang Dibatasi di SQL Server?
Pada artikel ini, kita akan membahas beberapa cara untuk membagi nilai string yang dipisahkan. Ini dapat dicapai dengan menggunakan berbagai metode termasuk.
- Gunakan fungsi STRING_SPLIT untuk memisahkan string
- Buat fungsi nilai tabel yang ditentukan pengguna untuk memisahkan string,
- Gunakan XQuery untuk membagi nilai string dan mengubah string yang dipisahkan menjadi XML
Pertama-tama, kita perlu membuat tabel dan memasukkan data ke dalamnya yang akan digunakan dalam ketiga metode tersebut. Tabel harus berisi satu baris dengan id bidang dan string dengan karakter pembatas di dalamnya. Buat tabel bernama “siswa” menggunakan kode berikut.
BUAT TABEL siswa (ID INT IDENTITAS (1, 1), student_name VARCHAR (MAX))
Masukkan nama siswa dipisahkan dengan koma dalam satu baris dengan mengeksekusi kode berikut.
MASUKKAN KE siswa (student_name) NILAI ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')
Verifikasi apakah data telah dimasukkan ke dalam tabel atau tidak menggunakan kode berikut.
pilih * dari siswa
Metode 1: Gunakan fungsi STRING_SPLIT untuk memisahkan string
Di SQL Server 2016, “STRING_SPLIT” fungsi diperkenalkan yang dapat digunakan dengan tingkat kompatibilitas 130 ke atas. Jika Anda menggunakan versi SQL Server 2016 atau lebih tinggi, Anda dapat menggunakan fungsi bawaan ini.
Selanjutnya “STRING_SPLIT” memasukkan string yang memiliki sub-string yang dipisahkan dan memasukkan satu karakter untuk digunakan sebagai pemisah atau pemisah. Fungsi ini menghasilkan tabel kolom tunggal yang barisnya berisi sub-string. Nama kolom keluaran adalah "Nilai". Fungsi ini mendapat dua parameter. Parameter pertama adalah string dan yang kedua adalah karakter pemisah atau pemisah berdasarkan mana kita harus membagi string. Keluarannya berisi tabel kolom tunggal yang memiliki substring. Kolom keluaran ini diberi nama "Nilai" seperti yang bisa kita lihat pada gambar di bawah ini. Apalagi “STRING SPLIT” fungsi table_valued mengembalikan tabel kosong jika string input adalah NULL.
Tingkat kompatibilitas database:
Setiap database terhubung dengan tingkat kompatibilitas. Ini memungkinkan perilaku database agar kompatibel dengan versi SQL Server tertentu yang dijalankannya.
Sekarang kita akan memanggil fungsi "string_split" untuk memisahkan string yang dipisahkan oleh koma. Tetapi tingkat kompatibilitas kurang dari 130 maka kesalahan berikut dimunculkan. “Nama objek‘ SPLIT_STRING '”tidak valid
Jadi kita perlu mengatur tingkat kompatibilitas database ke 130 atau lebih tinggi. Jadi kami akan mengikuti langkah ini untuk mengatur tingkat kompatibilitas database.
- Pertama-tama atur database ke “single_user_access_mode” dengan menggunakan kode berikut.
ALTER DATABASE <[database_name]> SET SINGLE_USER
- Kedua, Ubah tingkat kompatibilitas database dengan menggunakan kode berikut ini.
ALTER DATABASE <[database_name]> SET COMPATIBILITY_LEVEL = 130
- Kembalikan database ke mode akses multi-pengguna dengan menggunakan kode berikut.
ALTER DATABASE <[database_name]> SET MULTI_USER
GUNAKAN [master] GO ALTER DATABASE [bridge_centrality] ATUR SINGLE_USER ALTER DATABASE [bridge_centrality] ATUR COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO
Outputnya adalah:
Sekarang jalankan kode ini untuk mendapatkan hasil yang diinginkan.
MENYATAKAN @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' SELECT * FROM STRING_SPLIT (@string_value, ',')
Output dari query ini adalah:
Metode 2: Untuk memisahkan string, buat fungsi nilai tabel yang ditentukan pengguna
Tentunya, metode tradisional ini didukung oleh semua versi SQL Server. Dalam teknik ini kita akan membuat fungsi yang ditentukan pengguna untuk membagi string dengan karakter yang dipisahkan menggunakan "SUBSTRING"Fungsi,"CHARINDEXDan while loop. Fungsi ini dapat digunakan untuk menambahkan data ke tabel keluaran karena tipe kembaliannya adalah “tabel”.
BUAT FUNGSI [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) KEMBALI @result_set TABLE (splited_data NVARCHAR (MAX)) MULAI MENYATAKAN @start_position INT, @ending_position INT SELECT @start_position INT @ending_position = CHARINDEX (@delimiter_character, @string_value) WHILE @start_positionSekarang jalankan skrip di bawah ini untuk memanggil fungsi split untuk memisahkan string dengan karakter pembatas.
MENYATAKAN @ VARCHAR @udent_name (MAX); MENYATAKAN @delimiter CHAR (1); SET @ pembatas = ',' SET @student_name = (PILIH nama_siswa DARI siswa) PILIH * DARI dbo.split_string (@student_name, @delimiter)Kumpulan hasil akan seperti ini.
Metode 3: Gunakan XQuery untuk membagi nilai string dan mengubah string yang dipisahkan menjadi XML
Karena fungsi yang ditentukan pengguna bersifat lengkap sumber daya sehingga kita harus menghindari fungsi-fungsi ini. Pilihan lain adalah built-in fungsi "string_split" tetapi fungsi ini dapat digunakan untuk database yang tingkat kompatibilitasnya 130 atau lebih tinggi. Jadi inilah solusi lain untuk menyelesaikan tugas yang sulit ini. Sebuah string dapat dipisahkan dengan menggunakan berikut ini XML.
MENYATAKAN @xml_value SEBAGAI XML, @string_value SEBAGAI VARCHAR (2000), @delimiter_value SEBAGAI VARCHAR (15) SET @ string_value = (PILIH student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Ganti (@string_value, @delimiter_value,' ') + ' ') SEBAGAI XML) PILIH @xml_valueOutput dari query ini adalah:
Jika Anda ingin melihat seluruh file XML. Klik pada link. Setelah Anda mengklik kode tautan akan terlihat seperti ini.
Sekarang string XML harus diproses lebih lanjut. Terakhir, kami akan menggunakan "x-Query" untuk melakukan kueri dari XML.
MENYATAKAN @xml_value SEBAGAI XML, @string_value SEBAGAI VARCHAR (2000), @delimiter_value SEBAGAI VARCHAR (15) SET @ string_value = (PILIH student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Ganti (@string_value, @delimiter_value,' ') + ' ') AS XML) PILIH x.m.query ('. '). Value ('. ',' VARCHAR (15) ') SEBAGAI NILAI DARI @ xml_value.nodes (' / studentname ') AS x (m)Outputnya akan seperti ini: