Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Xóa các ký tự trùng lặp lặp đi lặp lại

Đ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ự.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao CTE lại tốt hơn con trỏ / bảng dẫn xuất / truy vấn con / bảng tạm thời, v.v.?

  2. Cách ánh xạ một trường thực thể có tên là một từ dành riêng trong JPA

  3. Tìm xem có bao nhiêu hàng nghìn, hàng trăm và hàng chục

  4. Kích thước tối đa cho một truy vấn SQL Server? Mệnh đề IN? Có một phương pháp tiếp cận tốt hơn không

  5. Khởi động EF cực kỳ chậm - 15 phút