No será fácil obtener su resultado, ya que lo está almacenando como simple 1 Year
o similar. No es no permitido usarlo dinámicamente en INTERVAL
construcción:sintaxis de MySQL exigencias
que señalará tanto la cantidad como el tipo del intervalo.
Sin embargo, hay una especie de truco para resolver el asunto:
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 puede ver, esta consulta se basa en el hecho de que la cantidad siempre va primero (así que CAST
lo extraerá exactamente, por lo tanto, se puede usar para obtener la longitud del intervalo después de esto). Pero en cualquier caso, tendrás que contar todos los posibles tipos de intervalo en CASE
cláusula
Otra buena idea sería:almacenar su período en forma unificada (por ejemplo, siempre en días), de modo que solo almacene un número para cada fila (por lo tanto, 1 semana =7 días, etc.)