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
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
Curtir tópico
+ 0
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:
ou, utilizando bind variables,
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:
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.
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
Responder
Clique aqui para fazer login e interagir na Comunidade :)