Como achar uma data q não está gravada no banco?
-
- Rank: Estagiário Sênior
- Mensagens: 11
- Registrado em: Sex, 18 Abr 2008 10:50 am
- Localização: muito
Por ex: eu tenho 2 campos datas(inicial e final) onde é rodado um servico que grava nessas 2 campos. E eu preciso fazer uma consulta q informando um intervalo (inicio e fim) traga os meses estao faltando nesses campos.
-
- Rank: DBA Pleno
- Mensagens: 264
- Registrado em: Dom, 19 Ago 2007 8:18 pm
- Localização: Ribeirão Preto - SP
Lucas de Souza
OCA Developer
Analista de sistemas
OCA Developer
Analista de sistemas
não intendo muito bem o seu problema... mais já tentou usar o months_between ??
ex:
ex:
select months_between(to_date('12/12/2008', 'dd/mm/yyyy'), to_date('12/01/2008', 'dd/mm/yyyy'))
from dual
/
- jessica.ff
- Rank: Programador Sênior
- Mensagens: 61
- Registrado em: Seg, 11 Jun 2007 2:28 pm
- Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.
Podes nos explicar melhor
Tb não consegui entender
Tb não consegui entender
-
- 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
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Bom dia brothers!
Bom, pelo que eu entendi, que nosso amigo necessita é o seguinte:
Supondo como exemplo a tabela EMP, campo Hiredate.
Ele quer saber que mês não está cadastrado nesta coluna. Por exemplo, saber as admissões que estão faltantes nos valores existentes.
Porém, no caso, não só em uma coluna, mas, na inicial e final, correto?
Se for isso, talvez tenha que montar algo dinâmico.
Bom, pelo que eu entendi, que nosso amigo necessita é o seguinte:
Supondo como exemplo a tabela EMP, campo Hiredate.
Ele quer saber que mês não está cadastrado nesta coluna. Por exemplo, saber as admissões que estão faltantes nos valores existentes.
Porém, no caso, não só em uma coluna, mas, na inicial e final, correto?
Se for isso, talvez tenha que montar algo dinâmico.
-
- Rank: Estagiário Sênior
- Mensagens: 11
- Registrado em: Sex, 18 Abr 2008 10:50 am
- Localização: muito
Hehe, nem eu entendi direito. O sistema na hora de grava a operacao no banco, ele grava nas data inicial e final o mês referente à operacao, Tipo: operacao tal referente ao mês fevereiro(01/02/2008 a 28/02/2008). então eu tenho q procura nesses dois campos os meses q não tem, entenderam? Tipo: não tem informacao referente ao mês 5 nesses campos. O ex q o amigo coloco ali em cima parece funcionar, mas qd eu usei ele não trouxe as datas certas, trouxe tudo. Uma duvida: Como ele vai saber qual campo serao esses month_between? Pelo tipo date das tabelas data inicial e final?
-
- Rank: DBA Pleno
- Mensagens: 264
- Registrado em: Dom, 19 Ago 2007 8:18 pm
- Localização: Ribeirão Preto - SP
Lucas de Souza
OCA Developer
Analista de sistemas
OCA Developer
Analista de sistemas
aquele months_between(dt_final, dt_inicial) ele retorna quantos meses estão entre as duas datas...
no exmplo acima... ele irá retornar 11 =D
no exmplo acima... ele irá retornar 11 =D
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Sex, 18 Mai 2007 11:52 am
- Localização: Descalvado
E ai, Martelus, beleza?
Se a sua consulta precisa ser como eu imagino, você poderia usar o "not between".
Ex.:
Select *
From sua_tabela
Where coluna_de_data not between data_inicial and data_final
Veja se ajuda.
Abraço
Se a sua consulta precisa ser como eu imagino, você poderia usar o "not between".
Ex.:
Select *
From sua_tabela
Where coluna_de_data not between data_inicial and data_final
Veja se ajuda.
Abraço
-
- Rank: Estagiário Sênior
- Mensagens: 11
- Registrado em: Sex, 18 Abr 2008 10:50 am
- Localização: muito
Pow Marcio vlw pela ajuda cara, mas nesse caso vai traze as datas q estao gravadas na tabela mas q não esteja no intervalo q eu passei. Vou tentar explicar melhor:
Foi gravado durante 2007 as seguintes datas:
...continua ate dezembro
Eu preciso fazer uma consuta q traga os meses: 4 e 7. não tem nenhum registro referente a esses dois meses. Entenderam?
Foi gravado durante 2007 as seguintes datas:
Data Inicial Data Final
01/01 30/01
01/02 28/02
01/03 30/03
01/05 30/05
01/06 31/06
01/08 31/08
01/09 30/09
Eu preciso fazer uma consuta q traga os meses: 4 e 7. não tem nenhum registro referente a esses dois meses. Entenderam?
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Sex, 18 Mai 2007 11:52 am
- Localização: Descalvado
Ah está! agora entendi o seu problema...
Pelo que percebi a data inicial sempre será o 1º dia do mês. Então você nem precisará da data final. Tentei fazer aqui usando uma tabela auxiliar(user_tables) para retornar todos os meses do período e fiz um Minus para retornar a diferença com a sua. Dá uma "oiada":
Qualquer coisa, manda ai.
[]s!
Pelo que percebi a data inicial sempre será o 1º dia do mês. Então você nem precisará da data final. Tentei fazer aqui usando uma tabela auxiliar(user_tables) para retornar todos os meses do período e fiz um Minus para retornar a diferença com a sua. Dá uma "oiada":
select add_months(trunc( TO_DATE('01/2008','MM/YYYY') ,'mm'),rownum-1)
from user_tables
where rownum <= months_between ( to_date('12/2008','mm/yyyy'),
to_date('01/2008','mm/yyyy')) + 1
minus
select data_inicial from sua_tabela
where data_inicial between '01/01/2008' and '01/12/2008'
[]s!
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Sex, 18 Mai 2007 11:52 am
- Localização: Descalvado
A sintaxe do months_between é assim mesmo. Aqui funcionou certinho. será a data_incial da sua tabela não está com a hora? se estiver, dê um trunc na data_inicial no último where.
Abraço!
Abraço!
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Sex, 18 Mai 2007 11:52 am
- Localização: Descalvado
Faz assim:
select add_months(trunc( TO_DATE('01/2008','MM/YYYY') ,'mm'),rownum-1)
from user_tables
where rownum <= months_between ( to_date('12/2008','mm/yyyy'),
to_date('01/2008','mm/yyyy')) + 1
minus
select trunc(data_inicial) from sua_tabela
where trunc(data_inicial) between '01/01/2008' and '01/12/2008'
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Sex, 18 Mai 2007 11:52 am
- Localização: Descalvado
Então o problema pode estar na tabela user_tables. Rode apenas a 1ª consulta. Se não retornar nada, substitua esta tabela por alguma outra que você tenha aí q possua pelo menos 12 registros.
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Sex, 18 Mai 2007 11:52 am
- Localização: Descalvado
Bom dia, Martelus. Nesse caso, não é uma tabela temporária. Eu usei uma tabela qualquer que tenha pelo menos 12 registros. É só pra usar o rownum da tabela...
-
- Rank: Estagiário Sênior
- Mensagens: 11
- Registrado em: Sex, 18 Abr 2008 10:50 am
- Localização: muito
hehe, vlw marcio pela ajuda. Mas acabei fazendo em java mesmo. Fico uma consulta simples pesquisando um mês/ano. Ai no java eu pego o intervalo q eu quero e mando procura cada mês, se não traz nada quer dizer q aquele mês está omisso.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 23 visitantes