sql >> Databáze >  >> RDS >> Mysql

Získejte data pro konkrétní časové období

Myslím, že problém je s pořadím hodnocení ve vašem WHERE doložka. Já vždy použijte hranaté závorky kolem OR operátory v SQL. Následující funguje na 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);

Pro informaci jsem použil toto testovací schéma:

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. Počet skupin ActiveRecord s nulami

  2. SQLAlchemy:aktualizace from_select

  3. Kolekce mapovaných příkazů neobsahuje hodnotu pro mapovač mybatis

  4. JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() v MySQL:Jaký je rozdíl?