Lebih
Bagaimana untuk membagi nilai yang dipisahkan dengan koma untuk kolom
Saya punya tabel seperti ini
Value String
-------------------
1 Cleo, Smith
Saya ingin pisahkan dengan koma string menjadi dua kolom
Value Name Surname
-------------------
1 Cleo Smith
Saya hanya perlu dua tetap kolom tambahan
123
33
Tujuan dapat diselesaikan dengan menggunakan query berikut -
Tidak ada readymade Membagi fungsi dalam sql server, jadi kita perlu membuat user defined function.
dan juga cek link di bawah ini untuk referensi
http://jahaines.blogspot.in/2009/06/converting-delimited-string-of-values.html
xml dasar jawabannya adalah sederhana dan bersih
merujuk ini
Saya pikir ini keren
Dengan MENERAPKAN CROSS
Coba ini (mengubah contoh-contoh ' ' untuk ',' atau apapun pembatas yang ingin anda gunakan)
Contoh penggunaan:
Ada beberapa cara untuk memecahkan masalah ini dan banyak cara yang berbeda telah diusulkan sudah. Yang paling sederhana adalah dengan menggunakan
KIRI
/SUBSTRING
dan lain-lain fungsi-fungsi string untuk mencapai hasil yang diinginkan.Data Sampel
Menggunakan fungsi-Fungsi String seperti
KIRI
Pendekatan ini gagal jika ada lebih dari 2 item dalam sebuah String. Dalam skenario seperti ini, kita dapat menggunakan splitter dan kemudian menggunakan
PIVOT
atau mengkonversi string ke dalam sebuahXML
dan menggunakan.node
untuk mendapatkan string item.XML
berdasarkan solusi yang telah dirinci oleh aads dan bvr dalam solusi mereka.Jawaban untuk pertanyaan ini yang menggunakan splitter, semua menggunakan
SEMENTARA
yang tidak efisien untuk membelah. Check this perbandingan kinerja. Salah satu yang terbaik splitter sekitarDelimitedSplit8K
, yang dibuat oleh Jeff Moden. Anda dapat membaca lebih lanjut tentang hal itu di siniSplitter dengan
PIVOT
Output
DelimitedSplit8K
oleh Jeff ModenSaya pikir PARSENAME lebih rapi fungsi yang digunakan untuk contoh ini, seperti yang dijelaskan dalam artikel ini: http://www.sqlshack.com/parsing-and-rotating-delimited-data-in-sql-server-2012/
Yang PARSENAME fungsi logis dirancang untuk mengurai empat bagian nama objek. Hal yang baik tentang PARSENAME adalah bahwa hal itu tidak terbatas pada parsing hanya SQL Server empat bagian nama objek – itu akan mengurai setiap fungsi atau data string yang dipisahkan oleh titik.
Parameter pertama adalah objek untuk mengurai, dan yang kedua adalah nilai integer dari objek piece untuk kembali. Artikel ini membahas penguraian dan berputar delimited data - perusahaan nomor telepon, tetapi hal ini dapat digunakan untuk mengurai nama/nama data juga.
Contoh:
Artikel tersebut juga menjelaskan menggunakan Ekspresi Meja yang Umum (CTE) disebut 'replaceChars', untuk menjalankan PARSENAME terhadap pembatas-diganti nilai-nilai. Sebuah CTE ini berguna untuk mengembalikan tampilan sementara atau hasil yang ditetapkan.
Setelah itu, UNPIVOT fungsi yang digunakan untuk mengkonversi beberapa kolom menjadi baris; SUBSTRING dan CHARINDEX fungsi-fungsi yang telah digunakan untuk membersihkan inkonsistensi data, dan LAG fungsi (baru untuk SQL Server 2012) telah digunakan di akhir, seperti ini memungkinkan referensi dari catatan sebelumnya.
Dengan SQL Server 2016 kita dapat menggunakan string_split untuk mencapai hal ini:
Kita dapat membuat fungsi seperti ini
Kita kemudian dapat memisahkan CSV nilai-nilai ke kita masing-masing kolom menggunakan pernyataan SELECT
`` MEMBUAT FUNGSI [dbo].[fn_split_string_to_column] ( @string NVARCHAR(MAX), @pembatas CHAR(1) ) KEMBALI @out_put TABEL ( [column_id] INT IDENTITY(1, 1) NOT NULL, [nilai] NVARCHAR(MAX) ) SEBAGAI BEGIN DECLARE @nilai NVARCHAR(MAX), @INT pos = 0, @INT len = 0
SET @string = KASUS KETIKA TEPAT(@string, 1) != @pembatas KEMUDIAN @string + @pembatas LAIN @string END
SEMENTARA CHARINDEX(@pembatas, @string, @pos + 1) > 0 BEGIN SET @len = CHARINDEX(@pembatas, @string, @pos + 1) - @pos SET @nilai = SUBSTRING(@string, @pos, @len)
MASUKKAN KE @out_put ([nilai]) SELECT LTRIM(RTRIM(@nilai)) SEBAGAI [kolom]
SET @pos = CHARINDEX(@pembatas, @string, @pos + @len) + 1 END
KEMBALI END
Saya pikir fungsi berikut akan bekerja untuk anda:
Anda harus membuat sebuah fungsi dalam SQL pertama. Seperti ini
Anda dapat memanggil fungsi ini, seperti ini:
Pelaksanaan:
Hasilnya akan seperti ini:
Gunakan Parsename() fungsi
Hasil
Coba ini:
Anda dapat menggunakan built-in
STRING_SPLIT
fungsi yang tersedia hanya di bawah tingkat kompatibilitas 130. Jika database anda tingkat kompatibilitas lebih rendah dari 130, SQL Server tidak akan dapat menemukan dan mengeksekusiSTRING_SPLIT
fungsi. Anda dapat mengubah tingkat kompatibilitas dari database menggunakan perintah berikut:Sintaks
lihat dokumentasi here
Menggunakan instring fungsi :)
Digunakan dua fungsi,
substring(string, posisi, panjang)
==> mengembalikan string dari posisi ke panjanginstr(string,pola)
==> kembali posisi pola.Jika kita tidak menyediakan suhu udara turun menjadi argumen dalam substring kembali sampai akhir string
Saya mengalami masalah yang sama tapi satu kompleks dan karena ini adalah thread pertama saya temukan mengenai masalah itu saya memutuskan untuk posting saya menemukan. aku tahu itu adalah kompleks solusi untuk masalah sederhana tetapi saya berharap bahwa saya bisa membantu orang lain yang pergi ke thread ini mencari solusi yang lebih kompleks. saya harus membagi string yang berisi 5 angka (kolom nama: levelsFeed) dan untuk menampilkan setiap nomor dalam kolom terpisah. misalnya: 8,1,2,2,2 harus ditampilkan sebagai :
Solusi 1: menggunakan XML fungsi: ini solusi paling lambat solusi jauh
Solusi 2: menggunakan fungsi Split dan pivot. (fungsi split split string ke baris dengan nama kolom Data)
Solusi 3: menggunakan fungsi-fungsi manipulasi string - tercepat dengan margin kecil dari solusi 2
sejak levelsFeed berisi 5 nilai string yang saya butuhkan untuk menggunakan fungsi substring untuk pertama string.
saya berharap bahwa solusi saya akan membantu orang lain yang punya thread ini mencari lebih kompleks split untuk kolom metode
Ini bekerja untuk saya
Fungsi ini paling cepat:
Contoh penggunaan: