Como filtrar datas com horas minutos e segundos

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
fabkons
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 08 Abr 2010 9:14 am
Localização: Florianopolis - Santa Catarina

Pessoal estou com um dilema para resolver e preciso de ajuda de vocês .

Meu problema e o seguinte tenho uma situacao que necessito
filtrar registro por horas e minutos.

tenho uma tabela com os campos

data_saida,liquido e placa no campo data_saida tenho a gravacao de data,horario
preciso efetuar o case da seguinte forma todos os registro do periodo
do dia 28/10 das 13horas ate 29/10 as 07:00 se refere ao periodo de producao 28/10/2010 com a selecao abaixo não estou conseguindo
filtrar pelo horario

Selecionar tudo

SELECT
  CASE WHEN To_Char(b.dt_saida) between '28.10.2010 13:00:00'  AND '29.10.2010 07:00:00 '
  THEN '28/10/2010'
  END periodoprod,
  b.dt_saida,
  b.liquido,
  b.placa
FROM balanca b,produto p, obra o
WHERE b.cd_produto = p.cd_produto
  AND b.cd_obra = o.cd_obra
  AND b.id_situacao = '1'
  AND b.cd_obra = '296'
ORDER BY dt_saida 
Abraco
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara algumas coisas.

Primeiro o teu case não esta filtrando nada na consulta, ele apenas retorna os resultados desejados em uma coluna e deu.

Segundo, tem que ver o formato deste teu campo data, pode ser que o to_char esteje capando alguma coisa.

Tenta mudar a máscara do teu to_char e adcionar os minutos e segundos nela. Ou pode colocar um to_date com a mascara certa nos campos do between.

Segue uns selects na dual para dar uma olhada.

Selecionar tudo

SELECT CASE 
               WHEN SYSDATE BETWEEN TO_DATE('02-NOV-2010 12:00:00','DD-MON-RRRR HH24:MI:SS') AND TO_DATE('04-NOV-2010 12:00:00','DD-MON-RRRR HH24:MI:SS')  THEN SYSDATE +1
              END ,
              CASE
              WHEN TO_DATE('02-NOV-2010 18:04:33','DD-MON-RRRR HH24:MI:SS') BETWEEN TO_DATE('02-NOV-2010 12:00:00','DD-MON-RRRR HH24:MI:SS') AND TO_DATE('04-NOV-2010 12:00:00','DD-MON-RRRR HH24:MI:SS')  THEN SYSDATE+2
              END,
              CASE
              WHEN '04-NOV-2010 18:04:33' BETWEEN '02-NOV-2010 12:00:00' AND '04-NOV-2010 18:05:00' THEN SYSDATE+3
              END
FROM DUAL
fabkons
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 08 Abr 2010 9:14 am
Localização: Florianopolis - Santa Catarina

Opa valeu obrigado pela dica foi resolvido desta forma

Selecionar tudo

SELECT
  b.nr_pesagem,
  b.dt_entrada,
  b.dt_saida,
  b.cd_obra,
  o.descricao,
  b.cd_produto,
  p.nm_produto,
  CASE WHEN b.dt_saida > To_Date('28/10/2010 13:00:00','DD/MM/YYYY HH24:MI:SS')
    AND b.dt_saida < To_Date('29/10/2010 07:00:00','DD/MM/YYYY HH24:MI:SS')
  THEN '28/10/2010'
  END periodoprod,
  b.liquido,
  b.placa
FROM balanca b,produto p, obra o
WHERE b.cd_produto = p.cd_produto
  AND b.cd_obra = o.cd_obra
  AND b.id_situacao = '1'
Responder
  • Informação
  • Quem está online

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