Query SQL range data

11/08/2023

0

Olá pessoal blz? Estou com a query abaixo do SQL do WMS, tenho o filtro de busca que hoje é a linha = and TCP.CD_CARGA in( :carga1@varchar2 , :carga2@varchar2 ), que traz apenas uma referencia com o numero da carga, preciso que o filtro seja um range de data e hora por exemplo 10/08/2023 19:00 até 11/08/2023 10:00, tentei diversas coisa e não consegui, alguem poderia me dar uma luz?

SELECT TCP.CD_EMPRESA,
TCP.NU_PEDIDO_ORIGEM,
TCP.TP_PEDIDO,
K_UTILS.GET_DS_TP_PEDIDO(TCP.TP_PEDIDO) DS_TIPO_PEDIDO,
TCP.CD_CLIENTE,
K_UTILS.GET_DS_CLIENTE(TCP.CD_EMPRESA, TCP.CD_CLIENTE) NOME_CLIENTE,
TCP.CD_CARGA,
TCP.NU_SEQ_ENTREGA,
CASE TCP.TP_AGUARDA_ROTEIRIZACAO WHEN ''''NNN'''' THEN ''''NENHUM'''' WHEN ''''RTY'''' THEN ''''ROUTEASY'''' WHEN ''''MAN'''' THEN ''''MANUAL'''' ELSE ''''RMS'''' END as Roteirizado ,
PRD.CD_CLASSE,
K_UTILS.GET_DS_CLASSE(PRD.CD_CLASSE) DS_CLASSE,
TDS.CD_PRODUTO,
K_UTILS.GET_DS_PRODUTO(PRD.CD_EMPRESA, PRD.CD_PRODUTO) DS_PRODUTO,
TDS.NU_ITEM,
TDS.CD_ENDERECO,
TDS.QT_PRODUTO QT_SEPARAR
FROM T_CAB_PEDIDO_SAIDA TCP,
T_DET_SEPARACAO TDS,
T_PRODUTO PRD
WHERE TCP.CD_EMPRESA = TDS.CD_EMPRESA
AND TCP.NU_PEDIDO = TDS.NU_PEDIDO
AND TDS.CD_EMPRESA = PRD.CD_EMPRESA
AND TDS.CD_PRODUTO = PRD.CD_PRODUTO
AND TCP.TP_AGUARDA_ROTEIRIZACAO NOT IN ( ''''RMS'''')
AND TCP.CD_EMPRESA = k_usuario.get_filial
and TCP.CD_CARGA in( :carga1@varchar2 , :carga2@varchar2 )
ORDER BY TCP.CD_CARGA asc, TCP.NU_SEQ_ENTREGA ASC
Marcelo

Marcelo

Responder

Post mais votado

11/08/2023

Na sua query não aparece nenhuma coluna que se pareca com data. Mas, pelo tipo do parâmetro "varchar2", suponho que seja um Oracle.

Supondo que a sua tabela T_CAB_PEDIDO_SAIDA tenha uma coluna do tipo DT_PEDIDO do tipo date, você poderia criar um filtro mais ou menos assim:

  and TCP.DT_PEDIDO BETWEEN TO_DATE('10/08/2023 19:00','dd/mm/yyyy hh24:mi:ss') and TO_DATE('11/08/2023 10:00','dd/mm/yyyy hh24:mi')


ou, utilizando bind variables,

  and TCP.DT_PEDIDO BETWEEN :DT_INICIO and :DT_FIM


Ao utilizar as bind variables, a aplicação precisa passar o parâmetro como data. Se isto não for possível, pode utilizar um parâmetro varchar2, assim:

  and TCP.DT_PEDIDO BETWEEN TO_DATE(:DT_INICIO,'dd/mm/yyyy hh24:mi:ss') and TO_DATE(:DT_FIM,'dd/mm/yyyy hh24:mi')


Utilizando explicitamente a função TO_DATE() para converter de varchar2 para date, você pode especificar o formato no qual está informando a data.

Quando não especificamos o formato explicitamente, o banco fará uma conversão implícita, utilizando o parâmetro NLS_DATE_FORMAT. Por default, este parâmetro pode estar configurado para o formato de data americano 'mm/dd/yyyy hh24:mi:ss'. Não é muito bom depender de variáveis de ambiente, pois elas podem mudar.

Arthur Heinrich

Arthur Heinrich
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar