Няма да е лесно да получите резултата си - тъй като го съхранявате като обикновен 1 Year
или подобен. Това ене разрешено да го използва динамично в INTERVAL
конструкция - MySQL синтаксис изисква
че ще посочите както количеството, така и вида на интервала.
Въпреки това, има един вид трик за разрешаване на проблема:
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
-както виждате, тази заявка разчита на факта, че количеството винаги е първо (така CAST
ще извлече точно него, следователно може да се използва за получаване на дължина на интервала след това). Но във всеки случай ще трябва да преброите всички възможни типове интервали в CASE
клауза
Друга добра идея би била – да съхранявате цикъла си в унифицирана форма (например винаги в дни) – така че ще съхранявате само едно число за всеки ред (по този начин 1 седмица=7 дни и т.н.)