Como retornar data no formato MM/DD/YYYY

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
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

Como retornar data no formato MM/DD/YYYY ???

pessoal, a pergunta parece idiota mas é que eu não sei mesmo, hehe

é possível fazer isso no Select ou no próprio Forms???


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

Já consegui, valeu!

To_Char(rhpessoa.pess_dt_nascimento, 'MM/DD/YYYY'),
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

aproveitei um antigo tópico criado por mim (pra não ter que criar outro) pois estou

novamente com uma dúvida em relação a datas, e vasculhei aqui pelo Fórum, não encontrei o

que resolvesse meu problema


preciso retornar num Select somente os registros do mês/ano informado, na tabela TRAGENDA

eu tenho o campo AGEN_DT_INICIAL que armazena a data e hora do agendamento (25/11/2007

15:00 por exemplo), quando eu entrar na tela, ela mostra uma espécie de calendário que

desenvolvi aqui, por mês

como faço o select nesse caso?

ex, pegando mês e ano, 11/2007, trazer todos registros cadastrados nesse mês/ano?:

Selecionar tudo

SELECT *
   FROM tragenda
 WHERE TO_CHAR(agen_dt_inicial,'MM/YYYY') = TO_CHAR('11/2007','MM/YYYY'); -- ou SYSDATE 

aqui também, enfim...

está dando erro, tentei trocar TO_CHAR por TO_DATE mas tb não funciona!
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, tenta dessa forma, faz um teste ai:

Selecionar tudo


SELECT *
  FROM TABELA
 WHERE TO_CHAR(DAT_EMISSAO,'MM/RRRR') = '11/2007'	;

qualquer coisa, manda ai.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Dessa forma funciona sim, mas lembre-se que assim você mata o índice.
Talvez o ideal neses caso era fazer algo assim:

Selecionar tudo

SELECT *
FROM TABELA
WHERE DAT_EMISSAO >= to_date('11/2007','DD/YYYY')
  AND DAT_EMISSAO <  to_date('12/2007','DD/YYYY')
Dessa forma tudo continua rápido :-D
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, valeu pelas dicas, por enquanto estou caminhando aqui com meu calendário/agenda feito na raça aqui no Forms :D

agora um outra dúvida, existe uma maneira mais "elegante" e mais direta de saber o total de dias de um determinado mês, sem ser da maneira que fiz aqui:

Selecionar tudo

vn_qtd_dias_mês := SUBSTR( (ADD_MONTHS( TRUNC(SYSDATE,'MM'), + 1 ) - 1), 1,2);
peguei o primeiro dia do mês, somei mais 1 mês nele, aí subtrai 1 dia :S e depois ainda foi preciso fazer um SUBSTR!!!

não existe um "Extract_Days_Month" ou algo parecido???
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??

tem uma forma sim. segue ai..

Selecionar tudo

SQL> SELECT SYSDATE DATA,
  2         TO_CHAR(LAST_DAY(SYSDATE),'DD') ULT_DIA
  3    FROM DUAL
  4  /

DATA      UL
--------- --
29-NOV-07 30
[]'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

aeeee galera, o que seria de mim sem este Fórum :D

valeuzão aí

depois que ficar pronto posto a imagem da parada aqui, hehe

está bem doido de fazer :-o
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, aproveitando o mesmo topico...

é possível eu manipular um cursor depois que ele já estiver carreagado???

ex, aqui eu abro o cursor com um select qualquer:

Selecionar tudo

OPEN c_(vn_dt_atual, vn_dt_proxima);  
LOOP
  FETCH c_ INTO reg;  	
  EXIT WHEN c_%NotFound;
END LOOP;
é possível eu entrar em outro loop com esse cursor já carregado e poder me 'movimentar' entre as posições (linhas) dele ??? tipo um CURSOR.NEXT, algo assim, sem que seja usado o FETCH novamente

OUTRO LOOP, o cursor já estará carregado, e eu precisarei que ele já esteja pra fazer testes de comparação abaixo:

Selecionar tudo

FOR i IN 1..42 LOOP
 	
  --Manipular a variável do cursor já carregada aqui dentro (???)

END LOOP;
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, eu desconheço uma forma de navegar entre um cursor, acho que não existe, porem uma opcao seria você carregar seu cursor em uma tabela temporaria usando o fetch into bulck collect.. ai é só você usar um For pra ir ou voltar na sua tabela temporaria..

sobre sobrepor o valor retornado no cursor tem como fazer sim, segue um exemplo ai.

Selecionar tudo

DECLARE
   CURSOR C IS
      SELECT SYSDATE   A FROM DUAL
      UNION 
      SELECT SYSDATE+1 A FROM DUAL
      UNION 
      SELECT SYSDATE+2 A FROM DUAL
      UNION 
      SELECT SYSDATE+3 A FROM DUAL;
      
BEGIN
   FOR x IN C LOOP
      dbms_output.put_line('>> '||X.A);
   END LOOP;
   dbms_output.put_line(' - ');
   FOR x IN C LOOP
      IF c%ROWCOUNT=2 THEN
         X.A := SYSDATE+30;
      END IF;
      dbms_output.put_line('>> '||X.A);
   END LOOP;
END ;

>> 29/11/2007 11:57:06
>> 30/11/2007 11:57:06
>> 01/12/2007 11:57:06
>> 02/12/2007 11:57:06
 - 
>> 29/11/2007 11:57:06
>> 29/12/2007 11:57:06 << ACRESCIMO DE 30 DIAS, ROWCOUNT = 2
>> 01/12/2007 11:57:06
>> 02/12/2007 11:57:06
[]'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

opa Cristiano, valeu pela dica

mas consegui montar a lógica usando Fetch mesmo no cursor, não sabia que era possível manipular livremento, colocando dentro de condições If, etc..


agora é outra coisa que estou enroscado aqui, uma coisa aparentemente besta, mas eu não consigo descobrir o que é!

tenho um list na tela do tipo PopList, não data base, um record group pra popular esse list quando o Forms for aberto, o list é populado normalmente, mas não consigo acessar os registros dele, se seleciono o registro 2, 3, etc, ele sempre volta pro primeiro!

a propriedade tanto do bloco quanto do list é não data base!

o que pode estar acontecendo?!?!


Select do Record Group:

Selecionar tudo

SELECT veic_nm_nome || ' [' || veic_nr_placa || ']' Label,
       veic_nr_placa Value
  FROM trveiculo
 WHERE veic_tp_veiculo IN ('O','R','C','V')
 ORDER BY veic_nm_nome 

detalhe, eu tenho um outro list numa outra canvas exatamente igual, porém, criei outro record group pra ele, e está funcioando normalmente, as propriedades estão idênttcas!

vi que existe umas restrições pro POPULATE_LIST aqui no Help, mas não consegui entender direito!


Usage Notes

Do not use the POPULATE_LIST built-in if the Mapping of Other Values property is defined and there are queried records in the block. Doing so may cause Form Builder to be unable to display records that have already been fetched.

For example, assume that a list item contains the values A, B, and C and the Mapping of Other Values property is defined. Assume also that these values have been fetched from the database (a query is open). At this point, if you populate the list using POPULATE_LIST, an error will occur because Form Builder will attempt to display the previously fetched values (A, B, and C), but will be unable to because these values were removed from the list and replaced with new values.

Before populating a list, close any open queries. Use the ABORT_QUERY built-in to close an open query.
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

só corrigindo, o List que está funcionando, está num bloco base table,

o que que não é base table que não funciona
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

consegui resolver o lance do list, era um lance da biblioteca aqui que deixava o bloco em modo consulta! :S

Gori, você disse na outra página pra eu utilizar dessa forma a comparação de intervalo entre datas

"Dessa forma funciona sim, mas lembre-se que assim você mata o índice.
Talvez o ideal nesses caso era fazer algo assim:"

Código:

Selecionar tudo

SELECT *
FROM TABELA
WHERE DAT_EMISSAO >= to_date('11/2007','DD/YYYY')
  AND DAT_EMISSAO <  to_date('12/2007','DD/YYYY')
agora eu pergunto, porque a comparação do campo Data = to_date('12/2007','DD/YYYY') não funciona (não retorna nenhum registro!)?

Selecionar tudo

SELECT *
  FROM tragenda
 WHERE agen_dt_inicial = TO_DATE('12/2007','MM/YYYY')
se eu fizer

Selecionar tudo

SELECT *
  FROM tragenda
 WHERE agen_dt_inicial >= TO_DATE('12/2007','MM/YYYY')
aí me retorna todos os registros do mês de dezembro, que mecanismo maluco é esse do SQL que não aceita = nas comparações de data mas se fizer >= aceita?!?!
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

outra coisa, na ferramenta de SQL (com a máscara devidamente configurada: MM/YYYY), se eu faço dessa forma, funciona!

Selecionar tudo

WHERE TO_DATE(agen_dt_inicial,'MM/YYYY') = 
TO_DATE('12/2007','MM/YYYY')
mas se eu coloco da mesma forma no Forms, na hora de abrir o cursor dá o erro: "ORA-01841 (full) year must be between -4713 and +9999, and not to be 0"
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,

TEm como fazer esse teste na tua base?

Selecionar tudo

 SELECT *
   FROM TRAGENDA
 WHERE  TO_DATE(TO_CHAR(AGEN_DT_INICIAL,'MM/RRRR'),'MM/RRRR') = TO_DATE('12/2007','MM/RRRR'); 
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

pow Paulão, funfou véio!! na base e no Cursor, dessa forma que você passou..

desculpem a 'ingnorância' galera, é que esse lance de conversão, principalmente se trabalhar com datas, é uma coisa que eu acho bem chato!, ainda estou aprendendo as possibilidades


valeu de novo :)
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

Blezera brother...

Precisando, estamos ai.
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

aí galera, deu trabalho mas está praticamente pronto o "calendário" de agendamento dos veículos da empresa...

Imagem
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes