結果を得るのは簡単ではありません-プレーンな1 Year
として保存しているからです または類似。 ない INTERVAL
で動的に使用できます 構築-MySQL構文
ただし、問題を解決するには、ある種のトリックがあります。
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
-ご覧のとおり、このクエリは事実に依存しており、その量が常に最初になります(したがって、 CAST
正確に抽出されるため、この後の間隔の長さを取得するために使用できます)。ただし、いずれの場合も、可能な限り再カウントする必要があります。 CASE
の間隔タイプ
条項
もう1つの良いアイデアは、期間を統一された形式(たとえば、常に日数)で保存することです。したがって、各行に1つの数値のみを保存します(つまり、1週間=7日など)