Tidak akan mudah untuk mendapatkan hasil Anda - karena Anda menyimpannya sebagai 1 Year
biasa atau serupa. Itu tidak diizinkan untuk menggunakannya secara dinamis di INTERVAL
konstruksi - sintaks MySQL permintaan
bahwa Anda akan menunjukkan kuantitas dan jenis interval.
Namun, ada semacam trik untuk menyelesaikan masalah ini:
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
-seperti yang Anda lihat, kueri ini bergantung pada fakta, bahwa kuantitas selalu menjadi yang pertama (jadi CAST
akan mengekstraknya dengan tepat, oleh karena itu, dapat digunakan untuk mendapatkan panjang interval setelah ini). Tapi bagaimanapun juga, Anda harus menceritakan semua kemungkinan jenis interval dalam CASE
klausa
Ide bagus lainnya adalah - untuk menyimpan periode Anda dalam bentuk terpadu (misalnya, selalu dalam hari) - jadi Anda hanya akan menyimpan satu angka untuk setiap baris (dengan demikian, 1 minggu=7 hari, dll.)