Ini berfungsi untuk string yang secara eksklusif berupa koma atau memiliki hingga 398 koma yang berdekatan.
SELECT
CASE
WHEN TargetString NOT LIKE '%[^,]%'
THEN '' /*The string is exclusively commas*/
ELSE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TargetString,
REPLICATE(',',16),','), /*399/16 = 24 remainder 15*/
REPLICATE(',',8),','), /* 39/ 8 = 4 remainder 7*/
REPLICATE(',',4),','), /* 11/ 4 = 2 remainder 3*/
REPLICATE(',',2),','), /* 5/ 2 = 2 remainder 1*/
REPLICATE(',',2),',') /* 3/ 2 = 1 remainder 1*/
END
FROM T
Tambahkan kekuatan ekstra 2 di bagian atas jika Anda membutuhkan lebih banyak atau hapus dari atas jika Anda membutuhkan lebih sedikit. Komentar oleh setiap tahap menunjukkan angka terkecil yang tidak akan berhasil ditangani oleh tahap ini.
Semua baris komentar dalam format ini
/* L/D = Q remainder R */
D: Corresponds to the length of the string generated by `REPLICATE`
R: Is always D-1
Q+R: Form L for the next step
Jadi untuk memperpanjang seri ke atas dengan REPLICATE(',',32),',')
yang lain panggung
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Jadi itu akan menangani bagian koma hingga 11.806 karakter.