9.4. Funções e operadores para cadeias de caracteres

Esta seção descreve as funções e operadores disponíveis para examinar e manipular valores cadeia de caracteres. Neste contexto, cadeia de caracteres inclui todos os valores dos tipos character, character varying e text. A menos que seja dito o contrário, todas as funções relacionadas abaixo trabalham com todos estes tipos, mas se deve tomar cuidado com os efeitos em potencial do preenchimento automático quando for utilizado o tipo character. De modo geral, as funções descritas nesta seção também trabalham com dados de tipos que não são cadeias de caracteres, convertendo estes dados primeiro na representação de cadeia de caracteres. Algumas funções também existem em forma nativa para os tipos cadeia de bits.

O SQL define algumas funções para cadeias de caracteres com uma sintaxe especial, onde certas palavras chave, em vez de vírgulas, são utilizadas para separar os argumentos. Os detalhes estão na Tabela 9-6. Estas funções também são implementadas utilizando a sintaxe regular de chamada de função (Consulte a Tabela 9-7).

Tabela 9-6. Funções e operadores SQL para cadeias de caracteres

Função Tipo retornado Descrição Exemplo Resultado
cadeia_de_caracteres || cadeia_de_caracteres text Concatenação de cadeias de caracteres 'Post' || 'greSQL' PostgreSQL
bit_length(cadeia_de_caracteres) integer Número de bits na cadeia de caracteres bit_length('José') 32
char_length(cadeia_de_caracteres) ou character_length(cadeia_de_caracteres) integer Número de caracteres na cadeia de caracteres char_length('José') 4
convert(cadeia_de_caracteres using nome_da_conversão) text Muda a codificação utilizando o nome de conversão especificado. As conversões podem ser definidas pelo comando CREATE CONVERSION. Além disso, existem alguns nomes de conversão pré-definidos. Veja na Tabela 9-8 os nomes de conversão disponíveis. convert('PostgreSQL' using iso_8859_1_to_utf_8) 'PostgreSQL' na codificação Unicode (UTF-8)
lower(cadeia_de_caracteres) text Converte as letras da cadeia de caracteres em minúsculas lower('SÃO') sÃo
octet_length(cadeia_de_caracteres) integer Número de bytes na cadeia de caracteres octet_length('José') 4
overlay(cadeia_de_caracteres placing cadeia_de_caracteres from integer [for integer]) text Substituir parte da cadeia de caracteres (sobreposição) overlay('Txxxxas' placing 'hom' from 2 for 4) Thomas
position(substring in cadeia_de_caracteres) integer Posição da subcadeia de caracteres position('om' in 'Thomas') 3
substring(cadeia_de_caracteres [from integer] [for integer]) text Extrai parte da cadeia de caracteres substring('Thomas' from 2 for 3) hom
substring(cadeia_de_caracteres from padrão) text Extrai a parte da cadeia de caracteres correspondente à expressão regular POSIX [a] substring('Thomas' from '...$') mas
substring(cadeia_de_caracteres from padrão for escape) text Extrai a parte da cadeia de caracteres correspondente à expressão regular SQL substring('Thomas' from '%#"o_a#"_' for '#') oma
trim([leading | trailing | both] [caracteres] from cadeia_de_caracteres) text Remove a cadeia de caracteres mais longa contendo apenas os caracteres (espaço por padrão) da extremidade inicial/final/ambas da cadeia_de_caracteres. trim(both 'x' from 'xTomxx') Tom
upper(cadeia_de_caracteres) text Converte as letras da cadeia de caracteres em maiúsculas upper('são') SãO
Notas:
a. Nos sistemas *nix execute man 7 regex para ver uma descrição das expressões regulares POSIX 1003.2. (N. do T.)

Estão disponíveis funções adicionais para manipulação de cadeias de caracteres, conforme mostrado na Tabela 9-7. Algumas delas são utilizadas internamente para implementar funções de cadeia de caracteres do padrão SQL, conforme mostrado na Tabela 9-6.

Tabela 9-7. Outras funções para cadeia de caracteres

Função Tipo retornado Descrição Exemplo Resultado
ascii(text) integer código ASCII do primeiro caractere do argumento ascii('x') 120
btrim(cadeia_de_caracteres text [, caracteres text]) text Remove a maior cadeia de caracteres contendo apenas os caracteres presentes em caracteres (espaço por padrão), do início e do fim da cadeia_de_caracteres btrim('xyxtrimyyx', 'xy') trim
chr(integer) text Caractere com o código ASCII fornecido chr(65) A
convert(cadeia_de_caracteres text, [codificação_de_origem name,] codificação_de_destino name) text Converte a cadeia de caracteres na codificação_de_destino. A codificação de origem é especificada por codificação_de_origem. Se a codificação_de_origem for omitida, será assumida a codificação do banco de dados. convert( 'texto_em_unicode', 'UNICODE', 'LATIN1') Representação na codificação ISO 8859-1 do texto_em_unicode
decode(cadeia_de_caracteres text, tipo text) bytea Decodifica os dados binários da cadeia_de_caracteres previamente codificada com encode(). O tipo do parâmetro é o mesmo que em encode(). decode('MTIzAAE=', 'base64') 123\000\001
encode(dados bytea, tipo text) text Codifica dados binários na representação somente ASCII. Os tipos suportados são: base64, hex e escape. encode( '123\\000\\001', 'base64') MTIzAAE=
initcap(text) text Converte a primeira letra de cada palavra em maiúscula e as demais em minúsculas. As palavras são seqüências de caracteres alfanuméricos separadas por caracteres não alfanuméricos. initcap('hi THOMAS') Hi Thomas
length(cadeia_de_caracteres text) integer Número de caracteres presentes na cadeia_de_caracteres. length('José') 4
lpad(cadeia_de_caracteres text, comprimento integer [, preenchimento text]) text Preenche a cadeia_de_caracteres até o comprimento adicionando os caracteres de preenchimento (espaço por padrão) à esquerda. Se a cadeia_de_caracteres for mais longa que o comprimento então é truncada (à direita). lpad('hi', 5, 'xy') xyxhi
ltrim(cadeia_de_caracteres text [, caracteres text]) text Remove a cadeia de caracteres mais longa contendo apenas caracteres presentes em caracteres (espaço por padrão) do início da cadeia_de_caracteres. ltrim('zzzytrim', 'xyz') trim
md5(cadeia_de_caracteres text) text Calcula o MD5 da cadeia_de_caracteres, retornando o resultado em hexadecimal. md5('abc') 900150983cd24fb0 d6963f7d28e17f72
pg_client_encoding() name Nome da codificação atual do cliente pg_client_encoding() LATIN1
quote_ident(cadeia_de_caracteres text) text Retorna a cadeia de caracteres fornecida apropriadamente entre aspas, para ser utilizada como identificador na cadeia de caracteres de um comando SQL. As aspas serão adicionadas somente quando forem necessárias (ou seja, se a cadeia de caracteres contiver caracteres não-identificadores, ou se contiver letras maiúsculas e minúsculas). As aspas internas são devidamente duplicadas. [a] quote_ident('Foo bar') "Foo bar"
quote_literal(cadeia_de_caracteres text) text Retorna a cadeia de caracteres fornecida apropriadamente entre apóstrofos, para ser utilizada como literal cadeia de caracteres na cadeia de caracteres de um comando SQL. Os apóstrofos e contrabarras embutidos são devidamente duplicados. quote_literal( 'O\'Reilly') 'O''Reilly'
repeat(cadeia_de_caracteres text, número integer) text Repete a cadeia_de_caracteres pelo número de vezes especificado repeat('Pg', 4) PgPgPgPg
replace(cadeia_de_caracteres text, origem text, destino text) text Substitui todas as ocorrências na cadeia_de_caracteres, da cadeia de caracteres de origem pela cadeia de caracteres de destino. replace( 'abcdefabcdef', 'cd', 'XX') abXXefabXXef
rpad(cadeia_de_caracteres text, comprimento integer [, preenchimento text]) text Preenche a cadeia_de_caracteres até o comprimento anexando os caracteres de preenchimento (espaço por padrão) à direita. Se a cadeia_de_caracteres for mais longa que o comprimento, então é truncada. rpad('hi', 5, 'xy') hixyx
rtrim(cadeia_de_caracteres text [, caracteres text]) text Remove do final da cadeia_de_caracteres, a cadeia de caracteres mais longa contendo apenas os caracteres presentes em caracteres (espaço por padrão). rtrim('trimxxxx', 'x') trim
split_part(cadeia_de_caracteres text, delimitador text, campo integer) text Divide a cadeia_de_caracteres utilizando o delimitador, retornando o campo especificado (contado a partir de 1). split_part( 'abc~@~def~@~ghi', '~@~', 2) def
strpos(cadeia_de_caracteres, caracteres) text Posição dos caracteres especificados; o mesmo que position(caracteres in cadeia_de_caracteres), mas deve ser observada a ordem invertida dos argumentos strpos('high', 'ig') 2
substr(cadeia_de_caracteres, origem [, contador]) text Extrai a subcadeia de caracteres caracteres; o mesmo que substring(cadeia_de_caracteres from origem for contador) substr('alphabet', 3, 2) ph
to_ascii(text [, codificação]) text Converte texto em outras codificações em ASCII [b] to_ascii('Conseqüência') Consequencia
to_hex(número integer ou bigint) text Converte o número em sua representação hexadecimal equivalente to_hex(2147483647) 7fffffff
translate(cadeia_de_caracteres text, origem text, destino text) text Todo caractere da cadeia_de_caracteres que corresponde a um caractere do conjunto origem, é substituído pelo caractere correspondente do conjunto destino. translate('12345', '14', 'ax') a23x5
Notas:
a. SQL server — A função quotename retorna uma cadeia Unicode com delimitadores adicionados, para tornar a cadeia de entrada um identificador delimitado válido para o Microsoft SQL Server 2005. Os delimitadores podem ser apóstrofos ( ' ), colchete esquerdo e direito ( [ ] ), ou aspas ( " ). O padrão é colchetes. SQL Server 2005 Books Online — QUOTENAME (Transact-SQL) (N. do T.)
b. A função to_ascii permite apenas a conversão das codificações LATIN1, LATIN2, LATIN9 e WIN1250.

Exemplo 9-1. Conversão de letras minúsculas e maiúsculas acentuadas

Abaixo estão mostradas duas funções para conversão de letras. A função maiusculas converte letras minúsculas, com ou sem acentos, em maiúsculas, enquanto a função minusculas faz o contrário, ou seja, converte letras maiúsculas, com ou sem acentos em minúsculas [1] .

=> \!chcp 1252
Active code page: 1252
=> CREATE FUNCTION maiusculas(text) RETURNS text AS '
'>   SELECT translate( upper($1),
'>          text ''áéíóúàèìòùãõâêîôôäëïöüç'',
'>          text ''ÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛÄËÏÖÜÇ'')
'> ' LANGUAGE SQL STRICT;

=> SELECT maiusculas('à ação seqüência');

    maiusculas
------------------
 À AÇÃO SEQÜÊNCIA

=> CREATE FUNCTION minusculas(text) RETURNS text AS '
'>   SELECT translate( lower($1),
'>          text ''ÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛÄËÏÖÜÇ'',
'>          text ''áéíóúàèìòùãõâêîôôäëïöüç'')
'> ' LANGUAGE SQL STRICT;

=> SELECT minusculas('À AÇÃO SEQÜÊNCIA');

    minusculas
------------------
 à ação seqüência

Tabela 9-8. Conversões nativas

Nome da conversão [a] Codificação de origem Codificação de destino
ascii_to_mic SQL_ASCII MULE_INTERNAL
ascii_to_utf_8 SQL_ASCII UNICODE
big5_to_euc_tw BIG5 EUC_TW
big5_to_mic BIG5 MULE_INTERNAL
big5_to_utf_8 BIG5 UNICODE
euc_cn_to_mic EUC_CN MULE_INTERNAL
euc_cn_to_utf_8 EUC_CN UNICODE
euc_jp_to_mic EUC_JP MULE_INTERNAL
euc_jp_to_sjis EUC_JP SJIS
euc_jp_to_utf_8 EUC_JP UNICODE
euc_kr_to_mic EUC_KR MULE_INTERNAL
euc_kr_to_utf_8 EUC_KR UNICODE
euc_tw_to_big5 EUC_TW BIG5
euc_tw_to_mic EUC_TW MULE_INTERNAL
euc_tw_to_utf_8 EUC_TW UNICODE
gb18030_to_utf_8 GB18030 UNICODE
gbk_to_utf_8 GBK UNICODE
iso_8859_10_to_utf_8 LATIN6 UNICODE
iso_8859_13_to_utf_8 LATIN7 UNICODE
iso_8859_14_to_utf_8 LATIN8 UNICODE
iso_8859_15_to_utf_8 LATIN9 UNICODE
iso_8859_16_to_utf_8 LATIN10 UNICODE
iso_8859_1_to_mic LATIN1 MULE_INTERNAL
iso_8859_1_to_utf_8 LATIN1 UNICODE
iso_8859_2_to_mic LATIN2 MULE_INTERNAL
iso_8859_2_to_utf_8 LATIN2 UNICODE
iso_8859_2_to_windows_1250 LATIN2 WIN1250
iso_8859_3_to_mic LATIN3 MULE_INTERNAL
iso_8859_3_to_utf_8 LATIN3 UNICODE
iso_8859_4_to_mic LATIN4 MULE_INTERNAL
iso_8859_4_to_utf_8 LATIN4 UNICODE
iso_8859_5_to_koi8_r ISO_8859_5 KOI8
iso_8859_5_to_mic ISO_8859_5 MULE_INTERNAL
iso_8859_5_to_utf_8 ISO_8859_5 UNICODE
iso_8859_5_to_windows_1251 ISO_8859_5 WIN
iso_8859_5_to_windows_866 ISO_8859_5 ALT
iso_8859_6_to_utf_8 ISO_8859_6 UNICODE
iso_8859_7_to_utf_8 ISO_8859_7 UNICODE
iso_8859_8_to_utf_8 ISO_8859_8 UNICODE
iso_8859_9_to_utf_8 LATIN5 UNICODE
johab_to_utf_8 JOHAB UNICODE
koi8_r_to_iso_8859_5 KOI8 ISO_8859_5
koi8_r_to_mic KOI8 MULE_INTERNAL
koi8_r_to_utf_8 KOI8 UNICODE
koi8_r_to_windows_1251 KOI8 WIN
koi8_r_to_windows_866 KOI8 ALT
mic_to_ascii MULE_INTERNAL SQL_ASCII
mic_to_big5 MULE_INTERNAL BIG5
mic_to_euc_cn MULE_INTERNAL EUC_CN
mic_to_euc_jp MULE_INTERNAL EUC_JP
mic_to_euc_kr MULE_INTERNAL EUC_KR
mic_to_euc_tw MULE_INTERNAL EUC_TW
mic_to_iso_8859_1 MULE_INTERNAL LATIN1
mic_to_iso_8859_2 MULE_INTERNAL LATIN2
mic_to_iso_8859_3 MULE_INTERNAL LATIN3
mic_to_iso_8859_4 MULE_INTERNAL LATIN4
mic_to_iso_8859_5 MULE_INTERNAL ISO_8859_5
mic_to_koi8_r MULE_INTERNAL KOI8
mic_to_sjis MULE_INTERNAL SJIS
mic_to_windows_1250 MULE_INTERNAL WIN1250
mic_to_windows_1251 MULE_INTERNAL WIN
mic_to_windows_866 MULE_INTERNAL ALT
sjis_to_euc_jp SJIS EUC_JP
sjis_to_mic SJIS MULE_INTERNAL
sjis_to_utf_8 SJIS UNICODE
tcvn_to_utf_8 TCVN UNICODE
uhc_to_utf_8 UHC UNICODE
utf_8_to_ascii UNICODE SQL_ASCII
utf_8_to_big5 UNICODE BIG5
utf_8_to_euc_cn UNICODE EUC_CN
utf_8_to_euc_jp UNICODE EUC_JP
utf_8_to_euc_kr UNICODE EUC_KR
utf_8_to_euc_tw UNICODE EUC_TW
utf_8_to_gb18030 UNICODE GB18030
utf_8_to_gbk UNICODE GBK
utf_8_to_iso_8859_1 UNICODE LATIN1
utf_8_to_iso_8859_10 UNICODE LATIN6
utf_8_to_iso_8859_13 UNICODE LATIN7
utf_8_to_iso_8859_14 UNICODE LATIN8
utf_8_to_iso_8859_15 UNICODE LATIN9
utf_8_to_iso_8859_16 UNICODE LATIN10
utf_8_to_iso_8859_2 UNICODE LATIN2
utf_8_to_iso_8859_3 UNICODE LATIN3
utf_8_to_iso_8859_4 UNICODE LATIN4
utf_8_to_iso_8859_5 UNICODE ISO_8859_5
utf_8_to_iso_8859_6 UNICODE ISO_8859_6
utf_8_to_iso_8859_7 UNICODE ISO_8859_7
utf_8_to_iso_8859_8 UNICODE ISO_8859_8
utf_8_to_iso_8859_9 UNICODE LATIN5
utf_8_to_johab UNICODE JOHAB
utf_8_to_koi8_r UNICODE KOI8
utf_8_to_sjis UNICODE SJIS
utf_8_to_tcvn UNICODE TCVN
utf_8_to_uhc UNICODE UHC
utf_8_to_windows_1250 UNICODE WIN1250
utf_8_to_windows_1251 UNICODE WIN
utf_8_to_windows_1256 UNICODE WIN1256
utf_8_to_windows_866 UNICODE ALT
utf_8_to_windows_874 UNICODE WIN874
windows_1250_to_iso_8859_2 WIN1250 LATIN2
windows_1250_to_mic WIN1250 MULE_INTERNAL
windows_1250_to_utf_8 WIN1250 UNICODE
windows_1251_to_iso_8859_5 WIN ISO_8859_5
windows_1251_to_koi8_r WIN KOI8
windows_1251_to_mic WIN MULE_INTERNAL
windows_1251_to_utf_8 WIN UNICODE
windows_1251_to_windows_866 WIN ALT
windows_1256_to_utf_8 WIN1256 UNICODE
windows_866_to_iso_8859_5 ALT ISO_8859_5
windows_866_to_koi8_r ALT KOI8
windows_866_to_mic ALT MULE_INTERNAL
windows_866_to_utf_8 ALT UNICODE
windows_866_to_windows_1251 ALT WIN
windows_874_to_utf_8 WIN874 UNICODE
Notas:
a. Os nomes das conversões obedecem a um esquema de nomes padronizado: O nome oficial da codificação de origem, com todos os caracteres não alfanuméricos substituídos por sublinhado, seguido por _to_, seguido pelo nome da codificação de destino processado da mesma forma que o nome da codificação de origem. Portanto, os nomes podem desviar dos nomes habituais das codificações.

9.4.1. Comparações entre o PostgreSQL, o Oracle, o SQL Server e o DB2

Nota: Seção escrita pelo tradutor, não fazendo parte do manual original.

Os exemplos abaixo comparam funções e operadores para cadeias de caracteres do Oracle, do SQL Server, do DB2 e do PostgreSQL 8.0.0.

Exemplo 9-2. Tamanho de uma cadeia de caracteres com espaço à direita

Abaixo são mostradas consultas que retornam como resultado o tamanho de uma cadeia de caracteres com espaço à direita. Note que apenas a função len do SQL Server 2000 não conta o espaço à direita.

PostgreSQL 8.0.0:

=> SELECT length('1234567890 ');

 length
--------
     11

SQL Server 2000:

SELECT len('1234567890 ') AS len

len
---
10

Oracle 10g:

SQL> SELECT length('1234567890 ') AS length FROM sys.dual;

    LENGTH
----------
        11

DB2 9.1:

db2 => VALUES(length('1234567890 '));

1
-----------
         11

Exemplo 9-3. Concatenação de cadeias de caracteres

Abaixo são mostradas consultas que retornam como resultado a concatenação de cadeias de caracteres. Deve ser observado que o SQL Server 2000 usa o operador +, enquanto os demais usam o operador || para concatenar cadeias de caracteres. Além disso, o Oracle e o DB2 possuem a função concat, nativa, para concatenar duas cadeias de caracteres. Embora o PostgreSQL e o SQL Server não possuam a função concat nativa, esta pode ser facilmente definida neste dois produtos.

PostgreSQL 8.0.0:

=> SELECT 'ae' || 'io' || 'u' AS vogais;

 vogais
--------
 aeiou

=> CREATE FUNCTION concat(text,text) RETURNS text AS '
'>   SELECT $1 || $2;
'> ' LANGUAGE SQL STRICT;

=> SELECT concat(concat('ae','io'),'u') AS vogais;

 vogais
--------
 aeiou

SQL Server 2000:

SELECT 'ae' + 'io' + 'u' AS vogais;

vogais
------
aeiou

CREATE FUNCTION dbo.concat(@s1 varchar(64), @s2 varchar(64))
RETURNS varchar(128)
AS
BEGIN
    RETURN @s1 + @s2
END
GO
SELECT dbo.concat(dbo.concat('ae','io'),'u') AS vogais
GO

vogais
------
aeiou

Oracle 10g:

SQL> SELECT 'ae' || 'io' || 'u' AS vogais FROM sys.dual;

VOGAI
-----
aeiou

SQL> SELECT concat(concat('ae','io'),'u') AS vogais FROM sys.dual;

VOGAI
-----
aeiou

DB2 9.1:

db2 => SELECT t.* FROM (VALUES('ae' || 'io' || 'u')) AS t(vogais);

VOGAIS
------
aeiou

db2 => SELECT t.* FROM (VALUES(concat(concat('ae','io'),'u'))) AS t(vogais);

VOGAIS
------
aeiou

9.4.2. Similaridades entre o PostgreSQL e o Oracle

Nota: Seção escrita pelo tradutor, não fazendo parte do manual original.

A Tabela 9-9 compara funções e operadores para cadeias de caracteres do PostgreSQL e do Oracle, através de exemplos tirados do próprio manual do Oracle, com intuito de mostrar similaridades.

Tabela 9-9. Funções e operadores para cadeias de caracteres do PostgreSQL e do Oracle

PostgreSQL 8.0.0 Oracle 10g
=> SELECT CHR(67)||CHR(65)||CHR(84) AS "Dog";

 Dog
-----
 CAT
SQL> SELECT CHR(67)||CHR(65)||CHR(84) "Dog"
 2  FROM sys.dual;
Dog
---
CAT
=> SELECT INITCAP('the soap') AS "Capitals";

 Capitals
----------
 The Soap
SQL> SELECT INITCAP('the soap') "Capitals"
 2  FROM sys.dual;
Capitals
---------
The Soap
=> SELECT LOWER('MR. SCOTT MCMILLAN') AS "Lowercase";

     Lowercase
--------------------
 mr. scott mcmillan
SQL> SELECT LOWER('MR. SCOTT MCMILLAN') "Lowercase"
 2  FROM sys.dual;
Lowercase
--------------------
mr. scott mcmillan
=> SELECT LPAD('Page 1',15,'*.') AS "LPAD example";

  LPAD example
-----------------
 *.*.*.*.*Page 1
SQL> SELECT LPAD('Page 1',15,'*.') "LPAD example"
 2  FROM sys.dual;
LPAD example
---------------
*.*.*.*.*Page 1
=> SELECT LTRIM('xyxXxyLAST WORD','xy') AS "LTRIM example";

 LTRIM example
---------------
 XxyLAST WORD
SQL> SELECT LTRIM('xyxXxyLAST WORD','xy') "LTRIM example"
 2  FROM sys.dual;
LTRIM example
------------
XxyLAST WORD
=> SELECT REPLACE('JACK and JUE','J','BL') AS "Changes";

    Changes
----------------
 BLACK and BLUE
SQL> SELECT REPLACE('JACK and JUE','J','BL') "Changes"
 2  FROM sys.dual;
Changes
--------------
BLACK and BLUE
=> SELECT RPAD('MORRISON',12,'ab') AS "RPAD example";

 RPAD example
--------------
 MORRISONabab
SQL> SELECT RPAD('MORRISON',12,'ab') "RPAD example"
 2  FROM sys.dual;
RPAD example
-----------------
MORRISONabab
=> SELECT RTRIM('BROWNINGyxXxyyx','xy') AS "RTRIM example";

 RTRIM example
---------------
 BROWNINGyxX
SQL> SELECT RTRIM('BROWNINGyxXxyyx','xy') "RTRIM example"
 2  FROM sys.dual;
RTRIM examp
-----------
BROWNINGyxX
=> SELECT SUBSTR('ABCDEFG',3,4) AS "Substring";

 Substring
-----------
 CDEF
SQL> SELECT SUBSTR('ABCDEFG',3,4) "Substring"
 2  FROM sys.dual;
Substring
---------
CDEF
=> SELECT TRANSLATE('2KRW229',
(> '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
(> '9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') AS "License";

 License
---------
 9XXX999
SQL> SELECT TRANSLATE('2KRW229',
 2  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
 3  '9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') "License"
 4  FROM sys.dual;
License
--------
9XXX999
=> SELECT TRANSLATE('2KRW229',
(>  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789')
->  AS "Translate example";

 Translate example
-------------------
 2229
SQL> SELECT TRANSLATE('2KRW229',
 2   '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789')
 3   "Translate example"
 4   FROM sys.dual;
Translate example
-----------------
2229
=> SELECT TRIM (0 FROM 0009872348900) AS "TRIM Example";

 TRIM Example
--------------
 98723489
SQL> SELECT TRIM (0 FROM 0009872348900) "TRIM Example"
 2  FROM sys.dual;
TRIM Example
------------
    98723489
=> SELECT UPPER('Large') AS "Uppercase";

 Uppercase
-----------
 LARGE
SQL> SELECT UPPER('Large') "Uppercase"
 2  FROM sys.dual;
Upper
-----
LARGE

Notas

[1]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

SourceForge.net Logo CSS válido!