Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL phân chia theo phạm vi thời gian

Bạn cần một nguồn hàng với tất cả số lần bạn muốn được trả lại. Sau đó, bạn có thể sử dụng thao tác JOIN để chọn các hàng được trả về.

Nếu bạn có một bảng như thế này:

CREATE TABLE cal (tm TIME NOT NULL PRIMARY KEY) ENGINE=InnoDB ;
INSERT INTO cal (tm)  VALUES ('00:00:00'),('00:30:00');
INSERT INTO cal (tm) SELECT ADDTIME(tm,'01:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'02:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'04:00:00') FROM cal;
... 

Sau đó, bạn có thể sử dụng nó trong truy vấn của mình:

SELECT v.id
     , c.tm
  FROM myview v
  JOIN cal c
    ON c.tm >= v.hour_from
   AND c.tm <= v.hour_to
 ORDER BY v.id, c.tm

Nếu bạn muốn các giá trị thời gian ở một định dạng cụ thể, bạn có thể sử dụng DATE_FORMAT chức năng:

SELECT v.id
     , DATE_FORMAT(c.tm,'%H:%i') AS hour_

Điều này giả định rằng các giá trị được trả về bởi chế độ xem là TIME loại dữ liệu. Nếu không, bạn sẽ muốn chuyển đổi chúng. (Hoặc bạn có thể nhận được kết quả tương tự khi làm việc với các chuỗi ký tự ở định dạng chuẩn.)

LƯU Ý:Bạn không bắt buộc phải có một bảng; nó có thể là bất kỳ nguồn hàng nào, chẳng hạn như dạng xem nội tuyến. Bạn chỉ cần đủ hàng (trong trường hợp của bạn, giả sử tăng nửa giờ từ 00:00 đến 23:30, tức là 48 hàng.)

Nếu bạn có bất kỳ phạm vi thời gian nào "vượt qua" ranh giới nửa đêm (ví dụ:22:00 đến 02:00), truy vấn mẫu sẽ không trả về bất kỳ hàng nào. Bạn cần phải điều chỉnh.

Một cái gì đó như:

 JOIN cal c
   ON ( t.hour_from <= t.hour_to 
      AND c.tm >= v.hour_from
      AND c.tm <= v.hour_to
      )
   OR ( t.hour_from > t.hour_to 
      AND (   c.tm <= v.hour_from
          OR  c.tm >= v.hour_to
          )
      )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách TỰ ĐỘNG cập nhật MySQL sau khi trường dấu thời gian expierd

  2. lỗi thời gian chạy:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

  3. Sử dụng PHP / MySQL để tính phần trăm

  4. truy vấn sql để xác định hàng hóa tương tự nhất theo thẻ

  5. Tại sao MySQL tự động chuyển đổi chuỗi thành số?