Saya mencari untuk membagi '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ...' (dipisahkan koma) menjadi tabel atau variabel tabel .
Adakah yang memiliki fungsi yang mengembalikan masing-masing berturut-turut?
sql
sql-server
tsql
sql-server-2008
jinsungy
sumber
sumber
Jawaban:
Berikut ini adalah solusi kuno:
Dalam SQL Server 2008 Anda dapat mencapai hal yang sama dengan kode .NET. Mungkin itu akan bekerja lebih cepat, tetapi yang pasti pendekatan ini lebih mudah dikelola.
sumber
Coba ini
ATAU
Banyak lagi cara melakukan hal yang sama ada di sini. Bagaimana cara memisahkan string yang dibatasi koma?
sumber
<
,>
atau&
(mis. Input adalah urutan bilangan bulat). Tiga karakter di atas akan menyebabkan Anda mendapatkan kesalahan parse alih-alih hasil yang diharapkan.SELECT b, CHARINDEX(@delimiter, @str, b) + LEN(@delimiter)
Seharusnya garis itu benarSELECT b, CHARINDEX(@delimiter, @str, b+1) + LEN(@delimiter)
. The b + 1 membuat perbedaan besar. Diuji di sini dengan ruang sebagai pembatas, tidak berfungsi tanpa perbaikan ini.MAXRECURSION
opsi untuk membagi lebih dari 100 bagian, gantiLEN
dengan sesuatu dari stackoverflow.com/q/2025585 untuk menangani spasi, dan mengecualikanNULL
baris untukNULL
input.Anda telah menandai SQL Server 2008 ini, tetapi pengunjung masa depan untuk pertanyaan ini (menggunakan SQL Server 2016+) mungkin ingin tahu
STRING_SPLIT
.Dengan fungsi bawaan baru ini, Anda sekarang dapat menggunakannya
Beberapa pembatasan fungsi ini dan beberapa hasil pengujian kinerja yang menjanjikan ada di posting blog ini oleh Aaron Bertrand .
sumber
Ini seperti .NET, bagi Anda yang terbiasa dengan fungsi itu:
sumber
di sini adalah fungsi pemisahan yang kamu tanyakan
jalankan fungsi seperti ini
sumber
Sumber respons ini: http://sqlhint.com/sqlserver/how-to/best-split-function-tsql-delimited
sumber
Saya tergoda untuk menggunakan solusi favorit saya. Tabel yang dihasilkan akan terdiri dari 2 kolom: PosIdx untuk posisi integer yang ditemukan; dan Nilai dalam integer.
Ini bekerja dengan menggunakan CTE rekursif sebagai daftar posisi, dari 1 hingga 100 secara default. Jika Anda perlu menggunakan string yang lebih panjang dari 100, cukup panggil fungsi ini menggunakan 'option (maxrecursion 4000)' seperti berikut:
sumber
pemakaian
sumber
CTE sederhana ini akan memberikan apa yang dibutuhkan:
sumber
Ini adalah versi lain yang benar-benar tidak memiliki batasan (misalnya: karakter khusus ketika menggunakan pendekatan xml, jumlah catatan dalam pendekatan CTE) dan ini berjalan jauh lebih cepat berdasarkan tes pada catatan 10M + dengan panjang rata-rata string sumber 4000. Semoga ini bisa membantu.
sumber
Menggunakan tabel penghitungan di sini adalah salah satu fungsi string split (pendekatan terbaik) oleh Jeff Moden
Disebut dari Tally OH! Fungsi SQL 8K “CSV Splitter” yang Ditingkatkan
sumber
Blog ini hadir dengan solusi yang cukup bagus menggunakan XML dalam T-SQL.
Ini adalah fungsi yang saya buat berdasarkan pada blog itu (ubah nama fungsi dan tipe hasil cast sesuai kebutuhan):
sumber
sumber
sumber
Anda menulis fungsi ini di sql server setelah masalah itu akan diselesaikan.
http://csharpdotnetsol.blogspot.in/2013/12/csv-function-in-sql-server-for-divide.html
sumber