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

Hàm TRANSLATE trong SQL SERVER

ĐÃ CHỈNH SỬA:

Tôi cảm thấy chết lặng - MatBailie đã chỉ ra một cách chính xác rằng giải pháp ban đầu của tôi không chính xác. Tôi thực sự luôn nghĩ rằng TRANSLATE('abc', 'abc', 'bcd') lẽ ra phải trả về ddd nhưng, sau khi kiểm tra BẢN DỊCH của SQL Server 2017, tôi thấy rằng 'bcd' sẽ là câu trả lời chính xác. Bạn có thể xem bản gốc (phiên bản không chính xác) của tôi bằng cách xem lịch sử của bài đăng này. Đây là giải pháp cập nhật sử dụng ngrams8k :

DECLARE
  @string varchar(8000)  = 'abc',
  @fromChar varchar(100) = 'abc', -- note: no mutation
  @toChar varchar(100)   = 'bcd';

SELECT newString = 
(
  SELECT CASE WHEN x>z THEN '' WHEN x>0 THEN s ELSE t END+''
  FROM dbo.ngrams8k(@string,1) ng
  CROSS APPLY (VALUES (charindex(ng.token,@fromChar),len(@toChar),ng.token)) x(x,z,t)
  CROSS APPLY (VALUES (ng.position, substring(@toChar,x.x,1))) xx(p,s)
  ORDER BY xx.p
  FOR XML PATH(''), TYPE
).value('(text())[1]', 'varchar(8000)');

Trả lại > bcd



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phiên bản SQL Server 2008

  2. Php với SQL Server

  3. Hiển thị tất cả các hàng trùng lặp

  4. Truy vấn Chọn SUM của tôi trả về giá trị rỗng. Nó sẽ trả về 0

  5. Visual Studio 2012 Database Designer - Chức năng có thay đổi không?