Oracle PL/SQL/Char Functions/Translate

Материал из SQL эксперт
Перейти к: навигация, поиск

all dashes ("-") were dropped from the translated string, and the digit "9" was translated into an asterisk.

   <source lang="sql">

SQL> SQL> SELECT

 2       TRANSLATE("4428-2174-5093-1501"
 3                ,"0123456789-"
 4                ,"0123456789") numbers_only
 5  FROM dual;

NUMBERS_ONLY


4428217450931501

</source>
   
  


from_template argument can contain more characters than to_template.

   <source lang="sql">

SQL> SQL> SELECT

 2       TRANSLATE("4428-2174-5093-1501"
 3                ,"0123456789-"
 4                ,"XXXXXXXXXX*")  hide_num
 5  FROM dual;

HIDE_NUM


XXXX*XXXX*XXXX*XXXX

</source>
   
  


Shifts the lowercase as well as uppercase characters in a column

   <source lang="sql">

SQL> SQL> -- create demo table SQL> create table Employee(

 2    ID                 VARCHAR2(4 BYTE)         NOT NULL,
 3    First_Name         VARCHAR2(10 BYTE),
 4    Last_Name          VARCHAR2(10 BYTE),
 5    Start_Date         DATE,
 6    End_Date           DATE,
 7    Salary             Number(8,2),
 8    City               VARCHAR2(10 BYTE),
 9    Description        VARCHAR2(15 BYTE)
10  )
11  /

Table created. SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2               values ("01","Jason",    "Martin",  to_date("19960725","YYYYMMDD"), to_date("20060725","YYYYMMDD"), 1234.56, "Toronto",  "Programmer")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("02","Alison",   "Mathews", to_date("19760321","YYYYMMDD"), to_date("19860221","YYYYMMDD"), 6661.78, "Vancouver","Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("03","James",    "Smith",   to_date("19781212","YYYYMMDD"), to_date("19900315","YYYYMMDD"), 6544.78, "Vancouver","Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("04","Celia",    "Rice",    to_date("19821024","YYYYMMDD"), to_date("19990421","YYYYMMDD"), 2344.78, "Vancouver","Manager")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("05","Robert",   "Black",   to_date("19840115","YYYYMMDD"), to_date("19980808","YYYYMMDD"), 2334.78, "Vancouver","Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("06","Linda",    "Green",   to_date("19870730","YYYYMMDD"), to_date("19960104","YYYYMMDD"), 4322.78,"New York",  "Tester")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("07","David",    "Larry",   to_date("19901231","YYYYMMDD"), to_date("19980212","YYYYMMDD"), 7897.78,"New York",  "Manager")
 3  /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

 2                values("08","James",    "Cat",     to_date("19960917","YYYYMMDD"), to_date("20020415","YYYYMMDD"), 1232.78,"Vancouver", "Tester")
 3  /

1 row created. SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee

 2  /

ID FIRST_NAME LAST_NAME START_DATE END_DATE SALARY CITY DESCRIPTION


---------- ---------- ----------- ----------- ---------- ---------- ---------------

01 Jason Martin 1996-JUL-25 2006-JUL-25 1234.56 Toronto Programmer 02 Alison Mathews 1976-MAR-21 1986-FEB-21 6661.78 Vancouver Tester 03 James Smith 1978-DEC-12 1990-MAR-15 6544.78 Vancouver Tester 04 Celia Rice 1982-OCT-24 1999-APR-21 2344.78 Vancouver Manager 05 Robert Black 1984-JAN-15 1998-AUG-08 2334.78 Vancouver Tester 06 Linda Green 1987-JUL-30 1996-JAN-04 4322.78 New York Tester 07 David Larry 1990-DEC-31 1998-FEB-12 7897.78 New York Manager 08 James Cat 1996-SEP-17 2002-APR-15 1232.78 Vancouver Tester 8 rows selected. SQL> SQL> SQL> --Shifts the lowercase as well as uppercase characters in a column SQL> SQL> SELECT id, TRANSLATE(first_name,

 2     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
 3     "EFGHIJKLMNOPQRSTUVWXYZABCDefghijklmnopqrstuvwxyzabcd")
 4  FROM employee;

ID TRANSLATE(


----------

01 Newsr 02 Epmwsr 03 Neqiw 04 Gipme 05 Vsfivx 06 Pmrhe 07 Hezmh 08 Neqiw 8 rows selected. SQL> SQL> SQL> SQL> -- clean the table SQL> drop table Employee

 2  /

Table dropped. SQL> SQL>

      </source>
   
  


TRANSLATE("555-143-3344", "1234567890","XXXXXXXXXX") phone

   <source lang="sql">

SQL> SQL> SQL> SELECT TRANSLATE("555-143-3344", "1234567890","XXXXXXXXXX") phone

 2  FROM   dual;

PHONE


XXX-XXX-XXXX



                                                                                                                                     Page           1

SQL>

</source>
   
  


TRANSLATE(): convert numbers

   <source lang="sql">

SQL> SQL> -- TRANSLATE(): convert numbers SQL> SQL> SELECT TRANSLATE(12345,

 2     54321,
 3     67890) FROM dual;

TRANS


09876 SQL>

      </source>
   
  


Translate: replaces a string character by character

   <source lang="sql">

SQL> -- Translate: replaces a string character by character. SQL> SQL> -- RANSLATE(string, characters_to_find, characters_to_replace_by) SQL> SELECT TRANSLATE("Mississippi", "s","S") FROM dual; TRANSLATE("


MiSSiSSippi


      </source>
   
  


TRANSLATE() returns a string where all occurrences of the from_template are replaced with corresponding characters in the to_template.

   <source lang="sql">

SQL> Syntax: TRANSLATE(<string_expression>, <from_template>, <to_template>) SQL> SQL> SQL> SELECT

 2       TRANSLATE ("4428-2174-5093-1501"
 3                 ,"0123456789-"
 4                 ,"XXXXXXXXXX*") hide_num
 5  FROM dual;

HIDE_NUM


XXXX*XXXX*XXXX*XXXX

</source>
   
  


TRANSLATE(x, from_string, to_string): Converts all occurrences of from_string in x to to_string

   <source lang="sql">

SQL> -- TRANSLATE(x, from_string, to_string): Converts all occurrences of from_string in x to to_string. SQL> SQL> select translate("1111","1","2") from dual; TRAN


2222

      </source>
   
  


Use translate function in update statement

   <source lang="sql">

SQL> SQL> create table nchar_samples(

 2      char_data  char(100),
 3      nchar_data nchar(100)
 4    )
 5    /

Table created. SQL> SQL> insert into nchar_samples( nchar_data )

 2    values ( N"Some text" )
 3    /

1 row created. SQL> SQL> update nchar_samples

 2       set char_data = translate( nchar_data using char_cs )
 3    /

1 row updated. SQL> SQL> drop table nchar_samples; Table dropped. SQL> SQL> --

</source>
   
  


Using the TRANSLATE() Function: to encode and decode

   <source lang="sql">

SQL> SQL> --Using the TRANSLATE() Function SQL> SQL> --TRANSLATE(x, from_string, to_string) to convert the occurrences of characters in from_string found in x to corresponding characters in to_string. SQL> SQL> --TRANSLATE(): shift each character in the string SECRET MESSAGE: MEET ME IN THE PARK by four places to the right: A becomes E, B becomes F SQL> SQL> SELECT TRANSLATE("SECRET MESSAGE: MEET ME IN THE PARK",

 2     "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
 3     "EFGHIJKLMNOPQRSTUVWXYZABCD") FROM dual;

TRANSLATE("SECRETMESSAGE:MEETMEINTH


WIGVIX QIWWEKI: QIIX QI MR XLI TEVO SQL> SQL> --select translate("www.sqle.ru","wjavscom","abced123") from dual; SQL> SQL>

      </source>