Responder a este comentário
Funções para tratamento de texto (strings)
Para tratamento de string/texto veja abaixo as funções/expressões existentes.
Para uma lista de todas as funções do Informix, consulte o Information Center.
Alguns exemplos são baseados na tabela abaixo:
create temp table dummy_table ( cod int , texto1 char(20) , texto2 varchar(40) , texto3 varchar(40,11) , ltexto lvarchar(1000)); insert into dummy_table values (1,' row1 ','var1', 'minvar1', 'meu super texto1'); insert into dummy_table values (2,'linha2','var2', 'm2', 'texto2'); insert into dummy_table values (3,'terceiro','var3', 'minvar3', 'meu texto3'); insert into dummy_table values (4,'','','','');
- campo[n,x]
- SUBSTR, SUBSTRING
- ASCII
- LENGTH, CHARACTER_LENGTH / CHAR_LENGTH, OCTET_LENGTH
- CONCAT / ||
- FORMAT_UNITS
- IFX_ALLOW_NEWLINE
- INITCAP, UPPER, LOWER
- LPAD, RPAD
- TRIM, LTRIM, RTRIM
- REPLACE
- TO_CHAR
campo[n,x]
-
Manual online: campo[n,x]
Copia uma substring, começando na posição n até a posição x. Pode ser utilizado em vários campos do tipo string (CHAR, VARCHAR, BYTE, NVARCHAR, NCHAR, TEXT).
Deve-se tomar cuidado com uso deste recurso na clausula WHERE de SELECT/UPDATE/DELETE porque quando utilizado o banco não tem como trabalhar com indices gerando um sequencial scan na tabela em questão. Para evitar este tipo de problema, sempre crie uma tabela temporária com os dados filtrados e por ultimo aplique esta clausula.
Observação: O mesmo vale para a função SUBSTR e SUBSTRING.
select texto1[3,6] , texto2[2,3] from dummy_table;
texto1 texto2
ow1 ar
nha2 ar
rcei ar
SUBSTR, SUBSTRING
-
Manual online: SUBSTR,SUBSTRING
Copiam um pedaço de texto .
As duas funções fazem a mesma coisa porém com sintaxe diferente.
Diferente do operador [n,x] , os parametros destas funções representam a posição inicial e comprimento
select substr('joao da silva',1,5) as a
, substring('joao da silva' from 1 for 5) as b
, substr('joao da silva',2,3) as c
from sysdual;
a joao
b joao
c oao
ASCII
-
Manual online: ASCII
Retorna o valor numerico na tabela ASCII do primeiro caractere da string passado como parametro
select texto1[1,1]
, ascii(texto1) ascii_minusculo
, ascii(upper(texto1)) ascii_maiusculo
from dummy_table ;
texto1 ascii_minusculo ascii_maiusculo
32 32
l 108 76
t 116 84
32 32
LENGTH, CHARACTER_LENGTH / CHAR_LENGTH, OCTET_LENGTH
-
Manual online: LENGTH, CHARACTER_LENGTH / CHAR_LENGTH, OCTET_LENGTH
Estas funções tem por finalidade retornar o tamanho de uma string e podem ter comportamento diferentes conforme o argumento passado como parâmetro.
A funçao LENGTH retorna o tamanho de *bytes utilizado* pelo texto sem os caracteres brancos no final da string com exceção do tipo de dado TEXT, neste ele inclui os espaços em branco no final do texto. Se utilizado em um campo MULTIBYTE (locales chines, japones, etc) ela irá contar cada byte individualmente.
A função CHAR_LENGTH é util para quando se trabalha com caracteres MULTIBYTE, ela conta cada palavra de dois-bytes como uma unica palavra, retornando assim o valor real do tamanho do texto. Mas deve-se ter cuidado ao utiliza-la pois seu comportamento é diferente para campos do tipo CHAR e VARCHAR. No campo CHAR ela sempre conta o tamanho do campo (mesmo campo vazio, não nulo) e no VARCHAR ela conta apenas o texto + espaços em branco.
A função OCTET_LENGTH é um meio termo, ele considera o espaço em branco no final do texto mas conta caracteres MULTIBYTES byte a byte, igual ao LENGTH.
select
texto1
, length(texto1) as len_t1
, character_length(texto1) as chlen_t1
, octet_length(texto1) as oclen_t1
, length(trim(texto1)) as len_trim_t1
, octet_length(trim(texto1)) as oclen_trim_t1
, character_length(trim(texto1)) as chlen_trim_t1
, texto3
, length(texto3) as len_t3
, character_length(texto3) as chlen_t3
, octet_length(texto3) as oclen_t3
, length(trim(texto3)) as len_trim_t3
, octet_length(trim(texto3)) as oclen_trim_t3
, character_length(trim(texto3)) as chlen_trim_t3
, trim(ltexto) as ltexto
, length(ltexto) as len_lt
, character_length(ltexto) as chlen_lt
, octet_length(ltexto) as oclen_lt
, length(trim(ltexto)) as len_trim_lt
, character_length(trim(ltexto)) as chlen_trim_lt
, octet_length(trim(ltexto)) as oclen_trim_lt
from dummy_table ;
texto1 row1
len_t1 5
chlen_t1 20
oclen_t1 20
len_trim_t1 4
oclen_trim_t1 4
chlen_trim_t1 4
texto3 minvar1
len_t3 7
chlen_t3 7
oclen_t3 7
len_trim_t3 7
oclen_trim_t3 7
chlen_trim_t3 7
ltexto meu super texto1
len_lt 16
chlen_lt 16
oclen_lt 16
len_trim_lt 16
chlen_trim_lt 16
oclen_trim_lt 16
texto1 linha2
len_t1 6
chlen_t1 20
oclen_t1 20
len_trim_t1 6
oclen_trim_t1 6
chlen_trim_t1 6
texto3 m2
len_t3 2
chlen_t3 2
oclen_t3 2
len_trim_t3 2
oclen_trim_t3 2
chlen_trim_t3 2
ltexto texto2
len_lt 6
chlen_lt 6
oclen_lt 6
len_trim_lt 6
chlen_trim_lt 6
oclen_trim_lt 6
texto1 terceiro
len_t1 8
chlen_t1 20
oclen_t1 20
len_trim_t1 8
oclen_trim_t1 8
chlen_trim_t1 8
texto3 minvar3
len_t3 7
chlen_t3 7
oclen_t3 7
len_trim_t3 7
oclen_trim_t3 7
chlen_trim_t3 7
ltexto meu texto3
len_lt 10
chlen_lt 10
oclen_lt 10
len_trim_lt 10
chlen_trim_lt 10
oclen_trim_lt 10
texto1
len_t1 0
chlen_t1 20
oclen_t1 20
len_trim_t1 0
oclen_trim_t1 0
chlen_trim_t1 0
texto3
len_t3 0
chlen_t3 0
oclen_t3 0
len_trim_t3 0
oclen_trim_t3 0
chlen_trim_t3 0
ltexto
len_lt 0
chlen_lt 0
oclen_lt 0
len_trim_lt 0
chlen_trim_lt 0
oclen_trim_lt 0
CONCAT / ||
select texto1
,texto2
,concat(texto1,texto2) as texto_concat
,texto1 || texto2 as texto_pipe
,concat(trim(texto1),trim(texto2)) as texto_concat_trim
,trim(texto1) || trim(texto2) as texto_pipe_trim
from dummy_table
where cod = 1 ;
texto1 row1
texto2 var1
texto_concat row1 var1
texto_pipe row1 var1
texto_concat_trim row1var1
texto_pipe_trim row1var1
FORMAT_UNITS
-
Manual online: FORMAT_UNITS
Originalmente criado para ser utilizado com as funções TASK e ADMIN porém pode ser utilizado pelo usuário.
Sua finalidade é gerar um texto padrão para unidades de armazenamento de memória e disco.
As unidades utilizadas nos parametros são: B,K,M,G,T,PB e P . P = Paginas no valor do sistema
select format_units( 1000,'K') as _1000k
, format_units( 1343,'M',5) as _1343m
, format_units( 20000,'p') as _paginas
, format_units( 1,'p') as _pagina_sistema
from sysdual;
_1000k 0.98 MB
_1343m 1.3115 GB
_paginas 39.1 MB
_pagina_sistema 2.00 KB
IFX_ALLOW_NEWLINE
-
Manual online: IFX_ALLOW_NEWLINE
Permite a inclusão de textos com quebra de linha (CR/LF)
execute procedure ifx_allow_newline('f'); Routine executed. insert into dummy_table (cod,ltexto) values (4,'teste linha2'); 282: Found a quote for which there is no matching quote. Error in line 66 Near character position 48 execute procedure ifx_allow_newline('t'); Routine executed. insert into dummy_table (cod,ltexto) values (4,'teste linha2'); 1 row(s) inserted.
INITCAP, UPPER, LOWER
-
Manual online: INITCAP, UPPER, LOWER
A função INITCAP converte apenas a primeira letra de cada palavra em maiúsculo.
A função UPPER converte todo texto em maiúsculo.
A função LOWER converte todo texto em minusculo.
select initcap('joão da silva filho') as a
, upper('joão da silva filho') as b
, lower('JOÃO DA SILVA FILHO') as c
from sysdual;
a João Da Silva Filho
b JOÃO DA SILVA FILHO
c joão da silva filho
LPAD, RPAD
-
Manual online: LPAD, RPAD
Completam um texto com outro texto até um tamanho pré-definido, onde a RPAD completa ao lado direito do texto e LPAD completa ao lado esquerdo.
select lpad('introducao',20,'.') as a
,lpad('vazio',20, ' ono ') as b
,lpad('10',5, '0') as c
,rpad('introducao',20,'.') as d
,rpad('vazio',20, ' ono ') as e
from sysdual ;
a ..........introducao
b ono ono ono vazio
c 00010
d introducao..........
e vazio ono ono ono
TRIM, LTRIM, RTRIM
-
Manual online: TRIM, LTRIM, RTRIM
As funções RTRIM e LTRIM removem um ou mais carcaterer do inicio e/ou final de um texto.
A função TRIM remove apenas um carcaterer do inicio e/ou final de um texto.
Para as tres funções, quando não informado qual caractere(s) a ser removido, espaço em branco é considerado o padrão.
select rtrim('100,00', ',0') as a
, rtrim('100,020', ',02') as b
, ltrim('100,001', '10') as c
, rtrim('**_ joao da silva_**','_ *') as d
, ltrim(' joao da silva ') as e
, trim(' joao da silva ') as f
, trim(both "-" from'- joao da silva -' ) as g
from sysdual ;
a 1
b 1
c ,001
d **_ joao da silva
e joao da silva
f joao da silva
g joao da silva
REPLACE
-
Manual online: REPLACE
Substitui um texto por outro
select replace( 'joao da silva filho' , 'filho', 'junior')
from sysdual ;
(constant)
joao da silva junior
TO_CHAR
-
Manual online: TO_CHAR
A função TO_CHAR gera, a partir de uma data/hora ou valor numérico, uma string formatada conforme definição do usuário.
Para formatação de campos numéricos ele utiliza as mesmas formatações utilizadas pelas funções rfmtdec(), rfmtdouble() e rfmtlong().
Para formatação de campos DATE/DATETIME ele trabalha com as mesmas mascaras utilizada pelas váriaveis GL_DATE e GL_DATETIME.
# Copiado do Manual # Exemplo de formatos que podem ser utilizados com valores numéricos RFMTDEC Sample ESQL Program running. String = 210203.204 Format String = '**###########' Result = '** 210203' Format String = '$$$$$$$$$$.##' Result = ' $210203.20' Format String = '(&&,&&&,&&&.)' Result = ' 000210,203. ' Format String = '<,<<<,<<<,<<<' Result = '210,203' Format String = ' $*********.**' Result = '$***210203.20' String = 4894 Format String = '**###########' Result = ' ** 4894' Format String = '$$$$$$$$$$.##' Result = ' $4894.00' Format String = '(&&,&&&,&&&.)' Result = ' 000004,894. ' Format String = '<,<<<,<<<,<<<' Result = '4,894' Format String = ' $*********.**' Result = '$*****4894.00' String = 443.334899312 Format String = '**###########' Result = ' ** 443' Format String = '$$$$$$$$$$.##' Result = ' $443.33' Format String = '(&&,&&&,&&&.)' Result = ' 0000000443. ' Format String = '<,<<<,<<<,<<<' Result = ' 443' Format String = ' $*********.**' Result = '$******443.33' String = -12344455 Format String = '**###########' Result = ' ** 12344455' Format String = '$$$$$$$$$$.##' Result = ' $12344455.00' Format String = '(&&,&&&,&&&.)' Result = '(12,344,455.)' Format String = '<,<<<,<<<,<<<' Result = '12,344,455' Format String = ' $*********.**' Result = ' $*12344455.00' RFMTDEC Sample Program over. # Exemplo de formatos com DATA e HORA > select dt1, dt2, TO_CHAR(dt1 , "%A. %e de %B, %Y") as a , TO_CHAR(dt2, "Gerado as %H horas e %M minutos") as b from tp01; dt1 18/07/2009 dt2 2009-07-18 16:26:28 a Sábado. 18 de Julho, 2009 b Gerado as 16 horas e 26 minutos # CLIENT_LOCALE=pt_BR.8859-1 > select dt1, dt2, TO_CHAR(dt1 , "%A. %e de %B, %Y") as a , TO_CHAR(dt2, "dia da semana: %A - mes %B") as b from tp01; dt1 18/07/09 dt2 2009-07-18 00:00:00 a Sábado. 18 de Julho, 2009 b dia da semana: Sábado - mes Julho # CLIENT_LOCALE=en_US.8859-1 > select dt1, dt2, TO_CHAR(dt1 , "%A. %e de %B, %Y") as a , TO_CHAR(dt2, "dia da semana: %A - mes %B") as b from tp01; dt1 07/18/2009 dt2 2009-07-18 00:00:00 a Saturday. 18 de July, 2009 b dia da semana: Saturday - mes July
- 2242 leituras
Tags:




