sql >> Databasteknik >  >> RDS >> Mysql

Få data för ett specifikt tidsintervall

Jag tror att problemet ligger i utvärderingsordningen i din WHERE klausul. Jag alltid använd parenteser runt OR operatorer i SQL. Följande fungerar på 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);

Som referens använde jag det här testschemat:

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. MySQL exklusivt lås

  2. Uppdatera mysql-data skickas inte

  3. WordPress-fråga:Sortera efter antal matchade rader?

  4. Doctrine 2 DQL CASE WHEN in Count