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

Sử dụng DATE_ADD với Tên cột làm Giá trị khoảng thời gian

Sẽ không dễ dàng để nhận được kết quả của bạn - vì bạn đang lưu trữ nó dưới dạng 1 Year đơn giản hoặc tương tự. Nó không được phép sử dụng động trong INTERVAL construct - Cú pháp MySQL nhu cầu rằng bạn sẽ chỉ ra cả số lượng và loại khoảng thời gian.

Tuy nhiên, có một loại mẹo để giải quyết vấn đề:

SELECT 
    product_name, 
    start_date,
    expiry_period,
    @num:=CAST(expiry_period AS UNSIGNED),
    @p  :=SUBSTR(expiry_period, CHAR_LENGTH(@num)+2),
    CASE
      WHEN @p='Year' THEN DATE_ADD(start_date, INTERVAL @num YEAR)
      WHEN @p='Month' THEN DATE_ADD(start_date, INTERVAL @num MONTH)
      WHEN @p='Day' THEN DATE_ADD(start_date, INTERVAL @num DAY)
      WHEN @p='Week' THEN DATE_ADD(start_date, INTERVAL @num WEEK)
    END AS end_date
FROM
    tbl_products

-như bạn có thể thấy, truy vấn này dựa trên thực tế, số lượng đó luôn đi trước (vì vậy CAST sẽ trích xuất chính xác nó, do đó, nó có thể được sử dụng để lấy độ dài khoảng sau này). Nhưng trong mọi trường hợp, bạn sẽ phải kể lại tất cả những gì có thể các loại khoảng thời gian trong CASE mệnh đề

Một ý tưởng hay khác là - lưu trữ chu kỳ của bạn ở dạng thống nhất (ví dụ:luôn tính theo ngày) - vì vậy bạn sẽ chỉ lưu trữ một số cho mỗi hàng (do đó, 1 tuần =7 ngày, e t.c.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:cột số lượng / tính chọn lọc thấp =làm thế nào để lập chỉ mục?

  2. MySQL 5.5.9 và lỗi tạo bảng Hibernate trên TYPE

  3. Ghép kênh Ruby / MySQL Lỗi:gói không hợp lệ:số thứ tự không khớp

  4. Cách tính toán sự khác biệt giữa hai ngày trong MySQL

  5. Cách cài đặt MySQL với phpMyAdmin trên Debian 7