Det bliver ikke nemt at få dit resultat - da du gemmer det som almindeligt 1 Year
eller lignende. Det er ikke tilladt at bruge det dynamisk i INTERVAL
konstruktion - MySQL-syntaks krav
at du vil pege både intervalmængde og type.
Der er dog et slags trick til at løse sagen:
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
-som du kan se, er denne forespørgsel afhængig af faktum, at mængden altid går først (så CAST
vil udtrække præcis det, derfor kan det bruges til at få intervallængde efter dette). Men under alle omstændigheder bliver du nødt til at tælle alt muligt om intervaltyper i CASE
klausul
En anden god idé ville være - at gemme din menstruation i samlet form (f.eks. altid i dage) - så du kun gemmer ét tal for hver række (altså 1 uge=7 dage, osv.)