sql >> Database >  >> RDS >> Mysql

Gegevens ophalen voor een specifiek tijdsbestek

Ik denk dat het probleem zit in de volgorde van evaluatie in je WHERE clausule. Ik altijd gebruik haakjes rond OR operatoren in SQL. Het volgende werkt op MySQL 5.6.

SELECT * 
FROM tb_test
WHERE  datecreate between '2018-09-24 19:00:00' and '2018-09-26 07:00:00'
AND (hour(DateCreate) >= 19 or hour(DateCreate) < 7);

Ter referentie heb ik dit testschema gebruikt:

CREATE table tb_test
(datecreate datetime);

CREATE OR REPLACE VIEW generator_16
AS SELECT 0 n UNION ALL SELECT 1  UNION ALL SELECT 2  UNION ALL 
 SELECT 3   UNION ALL SELECT 4  UNION ALL SELECT 5  UNION ALL
 SELECT 6   UNION ALL SELECT 7  UNION ALL SELECT 8  UNION ALL
 SELECT 9   UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL
 SELECT 12  UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL 
 SELECT 15;

CREATE OR REPLACE VIEW generator_256
AS SELECT ( ( hi.n << 4 ) | lo.n ) AS n
 FROM generator_16 lo, generator_16 hi;

INSERT INTO tb_test
SELECT date_add("2018-09-24",interval n hour)
FROM generator_256;


  1. PHP mysqli retourneert verkeerde kolommen

  2. Heeft SQLAlchemy een bool_and aggregatiefunctie?

  3. PHP / MySQL conceptuele database 'Sync'-vraag

  4. Geldt de limiet voor het maximale aantal SQL-jointabellen voor de hele query of worden subquery's afzonderlijk geteld?