sql >> データベース >  >> RDS >> Mysql

間隔値として列名を指定したDATE_ADDの使用

    結果を得るのは簡単ではありません-プレーンな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日など)



    1. mysqlテーブルから一意のキーを削除する方法

    2. SELECTステートメントのサブクエリ(MySQL)

    3. DATE型列のデフォルト値を時間部分のない現在の日付に設定しますか?

    4. 挿入または削除後のOracleトリガー