Di Oracle, TRANSLATE()
fungsi memungkinkan Anda untuk membuat beberapa karakter tunggal, substitusi satu-ke-satu dalam satu operasi.
Ini 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.
Ini mirip dengan REPLACE()
fungsi, kecuali bahwa REPLACE()
fungsi menggantikan seluruh string dengan string lain (yaitu bukan karakter demi karakter, seperti TRANSLATE()
tidak).
Sintaks
Sintaksnya seperti ini:
TRANSLATE(expr, from_string, to_string)
Fungsi mengembalikan expr
dengan semua kemunculan setiap karakter dalam from_string
diganti dengan karakter yang sesuai di to_string
.
Contoh
Berikut ini contoh dasarnya:
SELECT
TRANSLATE('Cat', 'at', 'ow')
FROM DUAL;
Hasil:
Cow
Di sini, a
dan t
karakter diganti dengan o
dan w
.
Dalam hal ini, REPLACE()
fungsi akan menghasilkan hasil yang sama. Berikut adalah dua fungsi berdampingan:
SELECT
TRANSLATE('Cat', 'at', 'ow') AS "TRANSLATE",
REPLACE('Cat', 'at', 'ow') AS "REPLACE"
FROM DUAL;
Hasil:
TRANSLATE REPLACE ____________ __________ Cow Cow
Dalam hal ini, hasil untuk kedua fungsi adalah sama, tetapi untuk alasan yang berbeda.
Inilah yang dilakukan setiap fungsi:
TRANSLATE()
menggantikana
dant
(setiap karakter individu)REPLACE()
digantiat
(tali)
Pesanan Campuran
Contoh ini menunjukkan di mana TRANSLATE()
berbeda dari REPLACE()
. Dalam contoh ini, saya mengubah urutan karakter yang akan diganti, serta karakter yang akan diganti:
SELECT
TRANSLATE('Cat', 'ta', 'wo') AS "TRANSLATE",
REPLACE('Cat', 'ta', 'wo') AS "REPLACE"
FROM DUAL;
Hasil:
TRANSLATE REPLACE ____________ __________ Cow Cat
Dalam hal ini hanya TRANSLATE()
fungsi mulai berlaku. Ini karena fungsi ini melewati setiap karakter satu per satu. REPLACE()
fungsi di sisi lain, mencari seluruh string, dalam urutan yang persis sama.
Contoh yang Lebih Kuat
Contoh ini menunjukkan skenario di mana TRANSLATE()
fungsi memiliki manfaat yang signifikan atas REPLACE()
fungsi:
SELECT
TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()')
FROM DUAL;
Hasil:
2*(3+4)/(7-2)
Untuk mendapatkan hasil yang setara menggunakan REPLACE()
fungsi, kita perlu melakukan ini:
SELECT
REPLACE
(
REPLACE
(
REPLACE
(
REPLACE
(
'2*[3+4]/{7-2}',
'[',
'('
),
']',
')'
),
'{',
'('
),
'}',
')'
)
FROM DUAL;
Hasil:
2*(3+4)/(7-2)
Contoh di atas didasarkan pada dokumentasi Microsoft untuk T-SQL TRANSLATE()
fungsi, yang mirip dengan versi Oracle.
Tidak Cocok
Jika tidak ada yang cocok, TRANSLATE()
mengembalikan string tidak berubah:
SELECT
TRANSLATE('Cat', 'x', 'y')
FROM DUAL;
Hasil:
Cat
Sensitivitas Huruf Besar
TRANSLATE()
fungsi melakukan pencocokan peka huruf besar/kecil:
SELECT
TRANSLATE('Cat', 'AT', 'ow')
FROM DUAL;
Hasil:
Cat
Dalam contoh ini, kasus tidak cocok, sehingga string asli dikembalikan tidak berubah.
String Kosong
Inilah yang terjadi ketika string kosong dilewatkan untuk setiap argumen yang diberikan:
SET NULL 'null';
SELECT
TRANSLATE('Cat', 'at', '') AS r1,
TRANSLATE('Cat', '', 'ow') AS r2,
TRANSLATE('', 'at', 'ow') AS r3
FROM DUAL;
Hasil:
R1 R2 R3 _______ _______ _______ null null null
Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null
terjadi sebagai akibat dari SQL SELECT
penyataan.
Namun, Anda dapat menggunakan SET NULL
untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null
harus dikembalikan.
Karakter Spasi
String kosong tidak sama dengan karakter spasi.
Inilah yang terjadi ketika kita mengubah string kosong menjadi spasi:
SELECT
TRANSLATE('Cat', 'at', ' ') AS r1,
TRANSLATE('Cat', ' ', 'ow') AS r2,
TRANSLATE(' ', 'at', 'ow') AS r3
FROM DUAL;
Hasil:
R1 R2 R3 _____ ______ _____ C Cat
Berikut adalah contoh yang menggambarkan bagaimana TRANSLATE()
dan REPLACE()
mengembalikan hasil yang berbeda saat menggunakan karakter spasi:
SELECT
TRANSLATE(' ', ' ', 'Cow') AS TRANSLATE,
REPLACE(' ', ' ', 'Cow') AS REPLACE
FROM DUAL;
Hasil:
TRANSLATE REPLACE ____________ __________ C Cow
Argumen Null
Melewati null
untuk setiap argumen mengembalikan null
:
SET NULL 'null';
SELECT
TRANSLATE(null, 'dog', 'cat') AS "1",
TRANSLATE('Black dog', null, 'cat') AS "2",
TRANSLATE('Black dog', 'dog', null) AS "3"
FROM DUAL;
Hasil:
1 2 3 _______ _______ _______ null null null
Argumen Tidak Ada
Memanggil TRANSLATE()
tanpa meneruskan argumen apa pun menghasilkan kesalahan:
SELECT TRANSLATE()
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT TRANSLATE() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Terlalu Banyak Argumen
Dan meneruskan terlalu banyak argumen akan mengembalikan kesalahan:
SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT TRANSLATE('Cat', 'a', 'b', 'c') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: