Filtrar por data/hora em campos separados

Forum sobre SQL.

Moderador: Moderadores

gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Filtrar por data/hora em campos separados

Mensagem por gilbertosilverio »

Olá Amigos,

Com faço para trazer todos os registros entre um período e a partir de uma determinada hora.

Ja tentei de todas as maneiras, mais só retorna, no caso no próximo dia a partir da hora que determinei...

Código: Selecionar todos

SELECT * FROM portais.entraportal WHERE dt_fecha >= '2021-05-24' AND dt_fecha <=  '2021-05-31'
AND HR_FECHA >= '16:00' LIMIT 1000 

Grato.
Anexos
t1.png
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Filtrar por data/hora em campos separados

Mensagem por gilbertosilverio »

Ola amigos,

Creio que seja essa a solução, usando CONCAT(), caso exista outra, por favor me ensinem como fazer...

Código: Selecionar todos

SELECT * FROM portais.entraportal WHERE CONCAT( dt_fecha, hr_fecha ) >= '2021-05-2416:00' LIMIT 1000 
Grato.
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Filtrar por data/hora em campos separados

Mensagem por JoséQuintas »

Código: Selecionar todos

where dtfecha > '2021-05-21' or ( dtfecha = '2021-05-21' and hrfecha >= '16:00' )
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3107
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Filtrar por data/hora em campos separados

Mensagem por alxsts »

Olá!

Acho que o que falta na questão é uma definição do período, com data e hora de início e data e hora de fim. Teste aí:

Código: Selecionar todos

SELECT *
  FROM portais.entraportal
 WHERE TimeStamp( dt_fecha, hr_fecha)  BETWEEN TimeStamp('2021-05-24 16:00') AND TimeStamp('2021-05-31 23:59')
LIMIT 1000;
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador
Colaborador
Mensagens: 3107
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Filtrar por data/hora em campos separados

Mensagem por alxsts »

Olá!

Outra opção:

Código: Selecionar todos

SELECT * 
  FROM portais.entraportal 
 WHERE CONCAT(dt_fecha, ' ', hr_fecha) BETWEEN '2021-05-24 16:00:00' AND '2021-05-31 23:59:59'
[]´s
Alexandre Santos (AlxSts)
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Filtrar por data/hora em campos separados

Mensagem por gilbertosilverio »

Olá amigos,

Quintas, Alexandre, obrigado pela ajuda.

Todas as formas retornam o que preciso, mais a que ficou mais funcional foi essa:

Código: Selecionar todos


SELECT * FROM portais.entraportal
WHERE CONCAT(dt_fecha, ' ', hr_fecha) BETWEEN '2021-05-24 16:00:00' AND '2021-05-31 23:59:59'
ORDER BY CONCAT (dt_fecha, ' ', hr_fecha)

Acrescentei ORDER BY CONCAT().

Outra duvida, devo usar o CONCAT() para "indexar" e filtrar campos para agilizar a pesquisa, quando necessário, ou somente usar ORDER BY com as colunas que desejo ordenar?

Grato.
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Filtrar por data/hora em campos separados

Mensagem por JoséQuintas »

Essa é uma boa pergunta, porque fiquei na dúvida nesse uso.
Com certeza do outro jeito dá pra aproveitar o índice pra agilizar.
Já com o CONCAT() NÃO sei dizer se precisa fazer o cálculo com cada registro pra poder aplicar o filtro.
Só mesmo fazendo um teste prático pra tirar a dúvida sobre isso.
Se mesmo assim aproveitar o índice, com certeza fica bem mais prático usar a conversão.
E já ir se preparando pra usar o campo datetime.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3107
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Filtrar por data/hora em campos separados

Mensagem por alxsts »

Olá!
gilbertosilverio escreveu:Outra duvida, devo usar o CONCAT() para "indexar" e filtrar campos para agilizar a pesquisa
Não. Diferentemente do sistema DBF, o MySQL não permite usar funções nas expressões de criação de índices.
JoséQuintas escreveu:Já com o CONCAT() NÃO sei dizer se precisa fazer o cálculo com cada registro pra poder aplicar o filtro.
Sim. A função é chamada para cada linha.
JoséQuintas escreveu:Se mesmo assim aproveitar o índice, com certeza fica bem mais prático usar a conversão.
Não testei mas provavelmente não vai usar índice por causa do Concat().

Nota sobre a função Concat():
se uma das expressões a serem concatenadas contiver o valor NULL, o resultado final será NULL.

Código: Selecionar todos

select concat( 'Forum ', 'Clipper ', 'on ', 'Line')   --> Forum Clipper on Line
select concat( 'Forum ', 'Clipper ', null , 'Line')   --> null
Para contornar isto, utilize a função Concat_WS() (WS = With Separator)

Código: Selecionar todos

select concat_ws( ' ', 'Forum', 'Clipper', 'on', 'Line')   --> Forum Clipper on Line
select concat_ws( ' ', 'Forum', 'Clipper', null , 'Line') --> Forum Clipper Line
O primeiro argumento é o separador. Se o separador for NULL, o resultado será NULL.
gilbertosilverio escreveu:Todas as formas retornam o que preciso, mais a que ficou mais funcional foi essa:
Portanto, se na tua tabela existirem valores NULL nas colunas envolvidas no Concat(), troque por Concat_WS().
[]´s
Alexandre Santos (AlxSts)
Responder