Como achar uma data q não está gravada no banco?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Seg, 21 Jul 2008 7:33 pm

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.
Martelus
Localização: MT

Mensagemem Ter, 22 Jul 2008 8:50 am

não intendo muito bem o seu problema... mais já tentou usar o months_between ??

ex:
Código: Selecionar todos
select months_between(to_date('12/12/2008', 'dd/mm/yyyy'), to_date('12/01/2008', 'dd/mm/yyyy'))
  from dual
/
gokden
Localização: Ribeirão Preto - SP

Lucas de Souza

OCA Developer
Analista de sistemas

Mensagemem Ter, 22 Jul 2008 9:15 am

Podes nos explicar melhor :?:

também não consegui entender :roll:
jessica.ff
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.

Mensagemem Ter, 22 Jul 2008 9:25 am

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.
Trevisolli
Localização: Araraquara - SP

Abraço,

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

Mensagemem Ter, 22 Jul 2008 11:27 am

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?
Martelus
Localização: MT

Mensagemem Ter, 22 Jul 2008 11:49 am

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
gokden
Localização: Ribeirão Preto - SP

Lucas de Souza

OCA Developer
Analista de sistemas

Mensagemem Ter, 22 Jul 2008 11:56 am

F*deu... :?
Martelus
Localização: MT

Mensagemem Ter, 22 Jul 2008 2:12 pm

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 :!:
marcio.adao
Localização: Descalvado

Mensagemem Ter, 22 Jul 2008 4:17 pm

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:
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
...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?
Martelus
Localização: MT

Mensagemem Ter, 22 Jul 2008 4:48 pm

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":

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'

Qualquer coisa, manda ai.

[]s!
marcio.adao
Localização: Descalvado

Mensagemem Ter, 22 Jul 2008 5:08 pm

Estranho, não trouxe nada a consulta. Essas datas estao certas, na linha 3 e 4 tem um between onde a primeira data é maior q a segunda, não teria q ser ao contrario?
Martelus
Localização: MT

Mensagemem Ter, 22 Jul 2008 5:15 pm

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!
marcio.adao
Localização: Descalvado

Mensagemem Ter, 22 Jul 2008 5:18 pm

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'
marcio.adao
Localização: Descalvado

Mensagemem Ter, 22 Jul 2008 5:30 pm

Cara, não é o problema do trunc na data não, ela não tem hora. E se fosse daria erro não? Ele executa, mas não traz nada. :( To vendo q vo te q fazer em java mesmo.
Martelus
Localização: MT

Mensagemem Ter, 22 Jul 2008 5:48 pm

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.
marcio.adao
Localização: Descalvado

Mensagemem Ter, 22 Jul 2008 6:05 pm

Cara, pelo q eu vi com o pessoal do bd daqui, não tem como usar uma tabela temporaria pra guardar a informacao, a gente usa oracle+ pl/sql
Martelus
Localização: MT

Mensagemem Qua, 23 Jul 2008 8:33 am

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...
marcio.adao
Localização: Descalvado

Mensagemem Qui, 24 Jul 2008 4:01 pm

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.
Martelus
Localização: MT



Voltar para SQL

Quem está online

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