Điều này hoạt động đối với các chuỗi chỉ có dấu phẩy hoặc có tối đa 398 dấu phẩy liền kề.
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
Thêm lũy thừa của 2 ở trên cùng nếu bạn cần nhiều hơn hoặc xóa từ trên cùng nếu bạn cần ít hơn. Các nhận xét theo từng giai đoạn chỉ ra con số nhỏ nhất mà giai đoạn này sẽ không giải quyết thành công.
Tất cả các dòng nhận xét đều ở định dạng này
/* 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
Vì vậy, để mở rộng chuỗi lên trên với một REPLICATE(',',32),',')
khác sân khấu
D = 32
R = 31
Q = 368 (399-31)
L = (368 * 32) + 31 = 11807
Vì vậy, điều đó sẽ giải quyết các phần dấu phẩy lên đến 11.806 ký tự.