Di SQL Server, REPLACE()
fungsi memungkinkan kita untuk mengganti string dengan string lain. Tetapi bagaimana jika Anda ingin mengganti daftar karakter dengan daftar karakter lain?
TRANSLATE()
fungsi mungkin membantu.
Berikut penjelasan Microsoft tentang TRANSLATE()
fungsi:
Mengembalikan string yang diberikan sebagai argumen pertama setelah beberapa karakter yang ditentukan dalam argumen kedua diterjemahkan ke dalam kumpulan karakter tujuan yang ditentukan dalam argumen ketiga.
Bening seperti lumpur?
Contoh
Saya pikir ini adalah salah satu waktu yang benar-benar meneriakkan contoh.
SELECT TRANSLATE('Fred [10 points]', '[]', '()');
Hasil:
Fred (10 points)
Pada dasarnya, seolah-olah kami telah menyediakan daftar nilai untuk menggantikan daftar nilai lainnya. Tetapi tidak perlu memisahkan setiap item daftar dengan pemisah.
Jumlah Karakter Sama
Argumen kedua dan ketiga harus berisi jumlah karakter yang sama.
Dengan kata lain, Anda tidak dapat melakukan ini:
SELECT TRANSLATE('Fred [10 points]', '[]', '(');
Hasil:
Msg 9828, Level 16, State 1, Line 1 The second and third arguments of the TRANSLATE built-in function must contain an equal number of characters.
Dalam hal ini argumen kedua berisi dua karakter tetapi argumen ketiga hanya berisi satu, jadi kita mendapatkan kesalahan.
Ini terjadi karena SQL Server perlu mengetahui karakter mana yang menggantikan karakter kedua dari argumen kedua. Ia melewati setiap karakter, satu per satu, menggantikannya dengan karakter yang sesuai dari argumen ketiga. Jika tidak ada, maka tidak ada pilihan selain membuat kesalahan.
Dibandingkan dengan REPLACE()
Berikut adalah contoh yang menggambarkan perbedaan antara TRANSLATE()
dan REPLACE()
.
SELECT
REPLACE('[] [hey]', '[]', '()') AS REPLACE,
TRANSLATE('[] [hey]', '[]', '()') AS TRANSLATE;
Hasil:
+-----------+-------------+ | REPLACE | TRANSLATE | |-----------+-------------| | () [hey] | () (hey) | +-----------+-------------+
REPLACE()
fungsi meninggalkan [hey]
persis seperti itu, karena seluruh string itu tidak disediakan dalam argumen kedua. Fungsi ini hanya menemukan kecocokan jika seluruh string ada.
TRANSLATE()
fungsi di sisi lain menggantikan [hey]
dengan (hey)
karena menggantikan setiap karakter satu per satu. Itu tidak mencari seluruh string untuk diganti, itu hanya mencari setiap karakter individu secara individual.