Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

TRANSLATE() Fungsi di Oracle

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() menggantikan a dan t (setiap karakter individu)
  • REPLACE() diganti at (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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jauhkan pesanan dari klausa 'IN'

  2. Oracle:beberapa pembaruan tabel => ORA-01779:tidak dapat mengubah kolom yang dipetakan ke tabel yang tidak diawetkan kunci

  3. Lewati daftar bilangan bulat dari C # ke dalam prosedur tersimpan Oracle

  4. Pustaka terkelola ODP.NET tidak menyelesaikan alias, tetapi pustaka 32-bit melakukannya

  5. Pembersihan kolom Tanggal Oracle