Het zal niet gemakkelijk zijn om uw resultaat te krijgen - aangezien u het opslaat als gewoon 1 Year
of vergelijkbaar. Het is niet mag het dynamisch gebruiken in INTERVAL
construct - MySQL-syntaxis eisen
dat u zowel de intervalhoeveelheid als het type aangeeft.
Er is echter een soort truc om de zaak op te lossen:
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
-zoals je kunt zien, is deze zoekopdracht gebaseerd op het feit dat die hoeveelheid altijd eerst staat (dus CAST
zal het precies extraheren, daarom kan het worden gebruikt om daarna de intervallengte te krijgen). Maar in ieder geval moet je alle mogelijke opnoemen intervaltypes in CASE
clausule
Een ander goed idee zou zijn - om uw menstruatie in uniforme vorm op te slaan (bijvoorbeeld altijd in dagen) - zodat u slechts één nummer voor elke rij opslaat (dus 1 week =7 dagen, enz.)