Página 1 de 1

Filtrar por data/hora em campos separados

Enviado: 25 Mai 2021 16:06
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.

Filtrar por data/hora em campos separados

Enviado: 25 Mai 2021 16:31
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.

Filtrar por data/hora em campos separados

Enviado: 25 Mai 2021 17:41
por JoséQuintas

Código: Selecionar todos

where dtfecha > '2021-05-21' or ( dtfecha = '2021-05-21' and hrfecha >= '16:00' )

Filtrar por data/hora em campos separados

Enviado: 25 Mai 2021 23:36
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;

Filtrar por data/hora em campos separados

Enviado: 26 Mai 2021 00:06
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'

Filtrar por data/hora em campos separados

Enviado: 26 Mai 2021 06:47
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.

Filtrar por data/hora em campos separados

Enviado: 26 Mai 2021 09:25
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.

Filtrar por data/hora em campos separados

Enviado: 27 Mai 2021 00:45
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().