Não será fácil obter seu resultado - já que você o está armazenando como
1 Year
simples ou similar. Não é não permitido usá-lo dinamicamente em INTERVAL
construct - sintaxe MySQL demandas
que você apontará a quantidade e o tipo do intervalo. No entanto, há uma espécie de truque para resolver o assunto:
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
-como você pode ver, esta consulta depende do fato, que a quantidade sempre vai primeiro (então
CAST
irá extraí-lo exatamente, portanto, ele pode ser usado para obter o comprimento do intervalo depois disso). Mas em qualquer caso, você terá que recontar todos os possíveis tipos de intervalo em CASE
cláusula Outra boa ideia seria - armazenar seu período de forma unificada (por exemplo, sempre em dias) - para armazenar apenas um número para cada linha (assim, 1 semana =7 dias, etc.)