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.)