Il ne sera pas facile d'obtenir votre résultat - puisque vous le stockez en tant que simple 1 Year
ou similaire. Ce n'est pas autorisé à l'utiliser dynamiquement dans INTERVAL
construction - syntaxe MySQL demandes
que vous indiquerez à la fois la quantité et le type d'intervalle.
Cependant, il existe une sorte d'astuce pour résoudre le problème :
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
-comme vous pouvez le voir, cette requête repose sur un fait, cette quantité passe toujours en premier (donc CAST
l'extrairea exactement, par conséquent, il peut être utilisé pour obtenir la longueur de l'intervalle après cela). Mais dans tous les cas, il faudra recompter tous les possibles types d'intervalle dans CASE
clause
Une autre bonne idée serait - de stocker vos règles sous une forme unifiée (par exemple, toujours en jours) - de sorte que vous ne stockez qu'un seul numéro pour chaque ligne (ainsi, 1 semaine =7 jours, etc.)