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

MYSQL MYSQLで2つの日付間のカスタム月差を実行するにはどうすればよいですか?

    このクエリはあなたが望むことをするだろうと思います。使用します

      (YEAR(CURDATE())*12+MONTH(CURDATE()))
    - (YEAR(STR_TO_DATE(join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(join_date, '%d-%m-%Y'))) -
    - 1
    

    ユーザーの1か月のエクスペリエンス数を取得するには

      DAY(LAST_DAY(STR_TO_DATE(join_date, '%d-%m-%Y')))
    - DAY(STR_TO_DATE(join_date, '%d-%m-%Y'))
    + 1
    

    最初の月の日数を取得するには、

    DAY(CURDATE())
    

    今月の日数を取得します。 2日間のカウントが合計され、合計が15を超える場合は、月全体の数に1が加算されます。例:

    SELECT id
         , name
         , (YEAR(CURDATE())*12+MONTH(CURDATE())) - (YEAR(STR_TO_DATE(join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(join_date, '%d-%m-%Y'))) - 1 -- whole months
           + CASE WHEN DAY(LAST_DAY(STR_TO_DATE(join_date, '%d-%m-%Y'))) - DAY(STR_TO_DATE(join_date, '%d-%m-%Y')) + 1 + DAY(CURDATE()) > 15 THEN 1 ELSE 0 END -- broken month
           AS months
    FROM user
    

    この式をJOINとして使用できます user間の条件 およびallowed_exp_range 特定の範囲内で経験を積んだすべてのユーザーを検索するには:

    SELECT u.id
         , u.name
         , a.starting_exp_months
         , a.end_exp_months
    FROM user u
    JOIN allowed_exp_range a
    ON (YEAR(CURDATE())*12+MONTH(CURDATE())) - (YEAR(STR_TO_DATE(u.join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(u.join_date, '%d-%m-%Y'))) - 1
           + CASE WHEN DAY(LAST_DAY(STR_TO_DATE(u.join_date, '%d-%m-%Y'))) - DAY(STR_TO_DATE(u.join_date, '%d-%m-%Y')) + 1 + DAY(CURDATE()) > 15 THEN 1 ELSE 0 END
           BETWEEN a.starting_exp_months AND a.end_exp_months
    

    出力(サンプルデータの場合、すべてのユーザーがいずれかのエクスペリエンス範囲に適合するため、すべてのユーザーが含まれます):

    id  name    starting_exp_months     end_exp_months
    1   Sam     9                       24
    2   Moe     9                       24
    3   Tim     0                       6
    4   Sal     9                       24
    5   Joe     0                       6
    

    小さなdbfiddleのデモ を作成しました これは、結果に到達するための手順を示しています。




    1. MySQLが結合し、別のテーブルからCOUNT(*)

    2. MSSQLServerデータベースをOracle11gデータベースに接続します

    3. ALTERテーブル-MySQLにAUTOINCREMENTを追加

    4. リンクサーバーに挿入された行のIDを取得する最良の方法は?