Formatar data e hora, não estou conseguindo

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

galera, estou fazendo importação de um arquivo texto e preciso pegar determinadas posições que irão compor data e hora, concatenando para que seja atribuído a uma variável do tipo date (variável vd_data)

tentei dessa forma, mas quando tento exibir uma msg na tela pra ver se está ok imprimie somente a data 01-SET-07, e não a hora e minutos/segundos junto

no meu caso eu não tenho o campo 'segundos', no arquivo texto, somente data, hora e minuto

exemplo:

Selecionar tudo

você_dia  := SUBSTR(você_linha,20,08); -- Ex: Data YYYYMMDD--> 20070901
você_hora := SUBSTR(você_linha,28,02) || ':' || SUBSTR(você_linha,48,02); -- Hora:Minuto
vd_data := TO_DATE(você_dia || você_hora, 'YYYY/MM/DD HH24:MI');

como posso revolver isso?!

valeus
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai Porva, beleza?

cara isso deve estar acontecendo porque você deve estar dando um message direto na variavel date.

Selecionar tudo

MESSAGE(vd_data);
MESSAGE(vd_data);
ao invés disso converta ela pra char no formato q você deseja, tipo esse exemplo aqui.

Selecionar tudo

MESSAGE(to_char(vd_data,'dd/mm/yyyy hh24:mi:ss'));
MESSAGE(to_char(vd_data,'dd/mm/yyyy hh24:mi:ss'));
[]'s
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

beleza Cristiano, era isso mesmo

eu só achei estranho porque debugando, o Forms também exibia '01-SET-07', sem a hora:minuto, mas da maneira que você disse funcionou, sendo assim, o valor que preciso está dentro da variável.


valeu!
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Cristiano, ainda estou com problemas com essa parada aqui! :(

o lance da exibição da mensagem do teste funcionou como no seu exemplo, belezinha

mas agora quando tento fazer o insert no banco, está dando erro de ORA-01722: invalid number


estou fazendo assim:

Selecionar tudo

Aqui eu monto a data, ex: 01/09/2007
você_dia := SUBSTR(você_linha,26,02) || '/' || SUBSTR(você_linha,24,02) || '/' || SUBSTR(você_linha,20,04);	  	  	  

e aqui, a hora sem os segundos, ex: 08:35
você_hora := SUBSTR(você_linha,28,02) || SUBSTR(você_linha,48,02); -- Hora Minuto    	  

--Aqui eu concateno os dois
vd_data := TO_DATE(você_dia || você_hora, 'DD/MM/YYYY HH24:MI');	    	  
msg_agenerico(to_char(vd_data,'DD/MM/YYYY HH24:MI'));	  
e o insert assim (onde gera o erro):

Selecionar tudo

INSERT INTO gelogramal (RAMA_NR_DDD,
RAMA_NR_RAMAL,
INRA_DDD,
INRA_NR, 
LORA_DT, --Aqui o campo que interessa na jogada 
LORA_QT_DURACAO,
LORA_TP_SITUACAO,
LORA_DS_JUSTIFICATIVA,
LORA_DT_IMPORTACAO,
LORA_DT_JUSTIFICATIVA,
LORA_NR_CUSTO,
USER_CD,
LORA_TP_LIGACAO)

VALUES (:b01.ddd,		  	      						
:b01.prefixo||você_ramal,
você_ddd,
você_telefone,
vd_data, --Aqui o campo que interessa na jogada
você_duracao,
'IM',
NULL,
SYSDATE,
NULL,
você_custo,
:global.você_usuario,
você_tipo);
alinhei do jeito que foi possível

o campo no banco e a variável 'vd_data' são DATE, então imaginei que passando direto já devidamente configurada a variável, não teria problema, o que pode ser que estou fazendo errado?

valeu
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Faz um teste, tentando juntar DATA e HORA, com este exemplo abaixo (faz uma adaptação onde você dá valor na variável ai "vd_data := ...") :

Selecionar tudo

SELECT TO_DATE(TO_CHAR(sysdate  ,'DD/MM/RRRR') || ' 235959','DD/MM/RRRR HH24MISS') FROM dual
Qualquer coisa, manda ai.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai Porva, beleza??

cara, tenta fazer uma mudança ai

nesse ponto coloca os 2 pontos separando a hora do minuto, ex..

Selecionar tudo

você_hora := SUBSTR(você_linha,28,02) ||':'|| SUBSTR(você_linha,48,02); -- Hora 
nesse ponto deixe um espaço entre o dia e a hora, pois no formato existe um espaço entre o ano e a hora.

Selecionar tudo

vd_data := TO_DATE(você_dia || você_hora, 'DD/MM/YYYY HH24:MI');  
se isso não resolver coloque Sysdate no lugar do vd_data, assim você poderá ter certeza se é esse campo ou não..

[]'s
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Selecionar tudo

SELECT COUNT(*)
INTO vn_qtd_aux
FROM gelogramal 
WHERE rama_nr_ddd   = :b01.ddd --DDD origem
AND rama_nr_ramal = :b01.prefixo||você_ramal
AND inra_ddd = você_ddd --DDD destino
AND inra_nr  = você_telefone
AND TO_DATE(lora_dt, 'DD/MM/YYYY HH24:MI') = TO_DATE(vd_data, 'DD/MM/YYYY HH24:MI')
AND lora_qt_duracao = você_duracao
AND lora_nr_custo   = você_custo; *Aqui está dando erro

se tento passar você_custo como VARCHAR, dá erro de Invalid Number

mas se tento converter você_custo dessa forma:

Selecionar tudo

 TO_NUMBER(você_custo,'9,999.99')
no caso, você_custo está como '0,64' (com vírgula e não ponto - '0.64')

o valor fica 64 após a conversão, ao invés de 0,64 ou 0.64 que seja!

como faço pra não ignorar o zero a esquerda???
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

opa, cortei uma parte da msg!

o que eu dizia antes do Select é que agora estou com esse problema
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai porva, beleza??

tenta isso ai brow,

Selecionar tudo

DECLARE
   você_CUSTO VARCHAR2(100);
BEGIN
   você_CUSTO := '0,64';
   DBMS_OUTPUT.PUT_LINE( TO_NUMBER(você_CUSTO,'9999999999D99','NLS_NUMERIC_CHARACTERS = '',.'' ') );
END;
[]'s
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Cristiano e Paulão, valeu pela atenção aí

conseguir resolver todos os casos até aqui com as dicas de vocês

valeu mesmo

se aparecer algum outro aqui que eu não dê conta sozinho, volto a importunar :D
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Não é importuno algum brother!
Precisando, conta aí com a gente.
Sucesso ai!
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Opa,

q isso Porva, agente sabendo com certeza vamos ajudar sim, e não é importunar não, pra gente é bom tb, assim algumas coisas q não usamos a muito tempo acabam não caindo no esquecimento hehehehe!!!

[]'s!! até!
Responder
  • Informação