Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Shayera Hall

converter uma string em número no oracle

Recommended Posts

Preciso relacionar duas tabelas onde o campo em uma é uma string (char) e na outra do tipo number. Para isso, preciso converter um dos dsso, preciso converter um dos dois campos. Dúvida: qual é melhor converter, o string para numero ou o do tipo numero para string?

 

E para isso, qual função utilizo?

 

obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

 

O que eu ja fiz (tinha a mesma situação) foi converter um dos campos com o to_number/to_char... eu converti o campo que era do tipo "number" para "char" pois caso tivesse algum usuário que por algum motivo cadastrou o código do campo char, por exemplo, "1A", se converter para number acontece erro que o oracle não converte caracteres para number (e claro, isso faz sentido)...

 

cod_campo1 varchar2(10)

cod_campo2 number(10)

 

...

where cod_campo1 = to_char(cod_campo2)

...

 

 

Se não estou enganado, o oracle faz a conversão automaticamente, mas caso haja um codigo "1a" por exemplo ja acontece erro....

 

Connected to Oracle9i Release 9.2.0.8.0 
Connected as adm
 
SQL> 
SQL> create table tabela_teste1( codigo_campo1 varchar2(10), descricao varchar2(30));
 
Table created
SQL> create table tabela_teste2( codigo number(1), descricao varchar2(30), CODIGO_CAMPO1 NUMBER);
 
Table created
SQL> insert into tabela_teste1 values( '1', 'primeiro registro');
 
1 row inserted
SQL> insert into tabela_teste1 values( 2, 'segundo registro');
 
1 row inserted
SQL> insert into tabela_teste1 values( '1a', 'terceiro registro');
 
1 row inserted
SQL> insert into tabela_teste2 values(1, 'reg 1', 1);
 
1 row inserted
SQL> insert into tabela_teste2 values(2, 'reg 2', 1);
 
1 row inserted
SQL> select * from tabela_teste1;
 
CODIGO_CAMPO1 DESCRICAO
------------- ------------------------------
1			 primeiro registro
2			 segundo registro
1a			terceiro registro
SQL> select * from tabela_teste2;
 
CODIGO DESCRICAO					  CODIGO_CAMPO1
------ ------------------------------ -------------
	 1 reg 1									  1
	 2 reg 2									  1
SQL> select a.*
  2	   , b.descricao desc_tabela1
  3	from tabela_teste2 a
  4	   , tabela_teste1 b
  5   where a.codigo_campo1 = b.codigo_campo1;
 
select a.*
	 , b.descricao desc_tabela1
  from tabela_teste2 a
	 , tabela_teste1 b
 where a.codigo_campo1 = b.codigo_campo1
 
ORA-01722: invalid number
SQL> select a.*
  2	   , b.descricao desc_tabela1
  3	from tabela_teste2 a
  4	   , tabela_teste1 b
  5   where a.codigo_campo1 = to_number(b.codigo_campo1);
 
select a.*
	 , b.descricao desc_tabela1
  from tabela_teste2 a
	 , tabela_teste1 b
 where a.codigo_campo1 = to_number(b.codigo_campo1)
 
ORA-01722: invalid number
SQL> select a.*
  2	   , b.descricao desc_tabela1
  3	from tabela_teste2 a
  4	   , tabela_teste1 b
  5   where to_char(a.codigo_campo1) = b.codigo_campo1;
 
CODIGO DESCRICAO					  CODIGO_CAMPO1 DESC_TABELA1
------ ------------------------------ ------------- ------------------------------
	 1 reg 1									  1 primeiro registro
	 2 reg 2									  1 primeiro registro
SQL> delete from tabela_teste1 where codigo_campo1 = '1a';
 
1 row deleted
SQL> select a.*
  2	   , b.descricao desc_tabela1
  3	from tabela_teste2 a
  4	   , tabela_teste1 b
  5   where a.codigo_campo1 = b.codigo_campo1;
 
CODIGO DESCRICAO					  CODIGO_CAMPO1 DESC_TABELA1
------ ------------------------------ ------------- ------------------------------
	 1 reg 1									  1 primeiro registro
	 2 reg 2									  1 primeiro registro
SQL> select a.*
  2	   , b.descricao desc_tabela1
  3	from tabela_teste2 a
  4	   , tabela_teste1 b
  5   where a.codigo_campo1 = to_number(b.codigo_campo1);
 
CODIGO DESCRICAO					  CODIGO_CAMPO1 DESC_TABELA1
------ ------------------------------ ------------- ------------------------------
	 1 reg 1									  1 primeiro registro
	 2 reg 2									  1 primeiro registro
SQL> select a.*
  2	   , b.descricao desc_tabela1
  3	from tabela_teste2 a
  4	   , tabela_teste1 b
  5   where to_char(a.codigo_campo1) = b.codigo_campo1;
 
CODIGO DESCRICAO					  CODIGO_CAMPO1 DESC_TABELA1
------ ------------------------------ ------------- ------------------------------
	 1 reg 1									  1 primeiro registro
	 2 reg 2									  1 primeiro registro
 
SQL>

obs.: pelo que puder ver, fica mais rapido se tu utilizar o cast To_Char no campo Number.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.