Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uzyskaj dane dla określonego przedziału czasu

Myślę, że problem jest z kolejnością oceny w twoim WHERE klauzula. Ja zawsze użyj nawiasów wokół OR operatory w SQL. Poniższe działania działają 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);

W celach informacyjnych użyłem tego schematu testowego:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uciec od pojedynczych cytatów w Doctrine?

  2. Emulacja bezpiecznej dla transakcji SEKWENCJI w MySQL

  3. Jak odzyskać klaster MySQL Galera z asynchronicznego urządzenia podrzędnego?

  4. Jak napisać zapytanie hql dla klauzuli between dla zakresu dat?

  5. Jak mogę uwzględnić linie podziału w rekordach mysql?