Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Fungsi TRANSLATE di SQL SERVER

DIEDIT:

Saya merasa bodoh - MatBailie dengan benar menunjukkan bahwa solusi asli saya salah. Saya sebenarnya selalu berpikir bahwa TRANSLATE('abc', 'abc', 'bcd') seharusnya mengembalikan ddd tetapi, setelah menguji TRANSLATE SQL Server 2017 saya melihat bahwa 'bcd' akan menjadi jawaban yang benar. Anda dapat melihat versi asli saya (versi salah) dengan melihat riwayat posting ini. Berikut adalah solusi terbaru yang menggunakan 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)');

Pengembalian> 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. Bagaimana saya bisa memilih kecocokan terdekat di SQL Server 2005?

  2. Temukan dan Hapus Substring Berulang

  3. pertanyaan tentang menyalin database SQL Server

  4. Panggil prosedur tersimpan dari php codeigniter

  5. 4 Cara Mendapatkan Daftar Jadwal di SQL Server Agent (T-SQL)