Es wird nicht einfach sein, Ihr Ergebnis zu erhalten, da Sie es einfach als 1 Year
speichern oder ähnliches. Es ist nicht erlaubt, es dynamisch in INTERVAL
zu verwenden Konstrukt - MySQL-Syntax fordert
dass Sie sowohl die Intervallmenge als auch den Typ angeben.
Es gibt jedoch eine Art Trick, um das Problem zu lösen:
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
-wie Sie sehen, beruht diese Abfrage auf der Tatsache, dass die Menge immer zuerst kommt (also CAST
wird es genau extrahieren, daher kann es verwendet werden, um danach die Intervalllänge zu erhalten). Aber in jedem Fall müssen Sie alles Mögliche nachzählen Intervalltypen in CASE
Klausel
Eine andere gute Idee wäre - Ihre Periode in einheitlicher Form zu speichern (z. B. immer in Tagen) - so dass Sie nur eine Zahl für jede Zeile speichern (also 1 Woche =7 Tage usw.)