Non sarà facile ottenere il risultato, dal momento che lo stai memorizzando come semplice 1 Year
o simili. non permesso di usarlo dinamicamente in INTERVAL
build - La sintassi MySQL richieste
che indicherai sia la quantità che il tipo di intervallo.
Tuttavia, c'è una specie di trucco per risolvere la questione:
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
-come puoi vedere, questa query si basa sul fatto che quella quantità va sempre per prima (quindi CAST
lo estrarrà esattamente, quindi può essere utilizzato per ottenere la lunghezza dell'intervallo dopo questo). Ma in ogni caso dovrai raccontare tutto il possibile tipi di intervallo in CASE
clausola
Un'altra buona idea sarebbe quella di memorizzare il ciclo in forma unificata (ad esempio, sempre in giorni), in modo da memorizzare un solo numero per riga (quindi, 1 settimana=7 giorni, ecc.)