Uzyskanie wyniku nie będzie łatwe - ponieważ przechowujesz go jako zwykły 1 Year
lub podobne. To nie wolno używać go dynamicznie w INTERVAL
konstrukcja - składnia MySQL żądania
że wskażesz zarówno ilość, jak i typ przedziału.
Istnieje jednak pewien sposób na rozwiązanie tej sprawy:
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
-jak widać, to zapytanie opiera się na fakcie, że ilość zawsze idzie pierwsza (więc CAST
wydobędzie dokładnie to, dlatego można go później użyć do uzyskania długości interwału). Ale w każdym razie będziesz musiał powtórzyć wszystkie możliwe typy interwałów w CASE
klauzula
Innym dobrym pomysłem byłoby - zapisanie okresu w ujednoliconej formie (na przykład zawsze w dniach) - dzięki czemu będziesz przechowywać tylko jedną liczbę w każdym wierszu (czyli 1 tydzień =7 dni itd.)