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

MariaDBでのYEARWEEK()のしくみ

    MariaDBでは、YEARWEEK() は、特定の日付の年と週を返す組み込みの日付と時刻の関数です。

    2つの引数を受け入れます。年と週を抽出する日付、および結果で使用するモードを指定するオプションのmode引数。

    週を0の範囲の数値として返します 53へ または1 53へ 、使用されているモードによって異なります。また、結果の年は、その年の最初と最後の週の日付引数の年とは異なる場合があります。

    構文

    構文は次のようになります:

    YEARWEEK(date), YEARWEEK(date,mode)

    これも次のように表現できます:

    YEARWEEK(date[,mode])

    date 年と週を取得する日付式であり、mode 使用するモードを指定できるオプションの引数です。

    モード

    オプションのmode 引数は、週が日曜日と月曜日のどちらで始まるか、および戻り値が0の範囲にあるかどうかを決定します。 53へ または1から 53へ 。

    mode引数は、次のいずれかになります。

    モード 第1日 範囲 第1週は第1週です…
    0 日曜日 0-53 今年の日曜日
    1 月曜日 0-53 今年は3日以上
    2 日曜日 1-53 今年の日曜日
    3 月曜日 1-53 今年は3日以上
    (ISO 8601:1988に準拠)
    4 日曜日 0-53 今年は3日以上
    5 月曜日 0-53 今年の月曜日
    6 日曜日 1-53 今年は3日以上
    7 月曜日 1-53 今年の月曜日

    mode引数を省略した場合、default_week_formatの値 システム変数が使用されます。

    default_week_formatの値を確認しましょう システム変数:

    SELECT @@default_week_format;

    結果:

    +-----------------------+
    | @@default_week_format |
    +-----------------------+
    |                     0 |
    +-----------------------+

    ここで、YEARWEEK()を実行すると モードを指定せずに、モード0を使用します 。

    YEARWEEK()を呼び出す例を次に示します。 モードを指定せずに:

    SELECT YEARWEEK('2030-01-01');

    結果:

    +------------------------+
    | YEARWEEK('2030-01-01') |
    +------------------------+
    |                 202952 |
    +------------------------+

    この場合、結果の年と週は前年のものです。

    モードを指定する

    モードを指定する例は次のとおりです。

    SELECT YEARWEEK('2030-01-01', 1);

    結果:

    +---------------------------+
    | YEARWEEK('2030-01-01', 1) |
    +---------------------------+
    |                    203001 |
    +---------------------------+

    今回は結果が異なります。

    同じ日付のすべてのモードを実行してみましょう:

    SELECT 
        YEARWEEK('2030-01-01', 0),
        YEARWEEK('2030-01-01', 1),
        YEARWEEK('2030-01-01', 2),
        YEARWEEK('2030-01-01', 3),
        YEARWEEK('2030-01-01', 4),
        YEARWEEK('2030-01-01', 5),
        YEARWEEK('2030-01-01', 6),
        YEARWEEK('2030-01-01', 7);

    結果(垂直出力を使用):

    YEARWEEK('2030-01-01', 0): 202952
    YEARWEEK('2030-01-01', 1): 203001
    YEARWEEK('2030-01-01', 2): 202952
    YEARWEEK('2030-01-01', 3): 203001
    YEARWEEK('2030-01-01', 4): 203001
    YEARWEEK('2030-01-01', 5): 202953
    YEARWEEK('2030-01-01', 6): 203001
    YEARWEEK('2030-01-01', 7): 202953

    日時の値

    YEARWEEK() 関数は日時値でも機能します:

    SELECT YEARWEEK('2030-08-01 10:30:45');

    結果:

    +---------------------------------+
    | YEARWEEK('2030-08-01 10:30:45') |
    +---------------------------------+
    |                          203030 |
    +---------------------------------+

    数値日付

    日付として意味がある限り、日付を数値として渡すこともできます。

    SELECT YEARWEEK(20301125);

    結果:

    +--------------------+
    | YEARWEEK(20301125) |
    +--------------------+
    |             203047 |
    +--------------------+

    または、次の場合でも(2桁の年を使用):

    SELECT YEARWEEK(301125);

    結果:

    +------------------+
    | YEARWEEK(301125) |
    +------------------+
    |           203047 |
    +------------------+

    しかし、それは日付として意味をなさなければなりません。日の部分を無効な日に増やすと、次のようになります。

    SELECT YEARWEEK(20301135);

    結果:

    +--------------------+
    | YEARWEEK(20301135) |
    +--------------------+
    |               NULL |
    +--------------------+
    1 row in set, 1 warning (0.000 sec)

    nullを返しました 警告付き。

    警告を見てみましょう:

    SHOW WARNINGS;

    結果:

    +---------+------+--------------------------------------+
    | Level   | Code | Message                              |
    +---------+------+--------------------------------------+
    | Warning | 1292 | Incorrect datetime value: '20301135' |
    +---------+------+--------------------------------------+

    その他の区切り文字

    日付には他の区切り文字を使用できます。 MariaDBは、日付の区切り文字に関しては非常に寛容です。いくつかの有効な例を次に示します。

    SELECT 
        YEARWEEK('2030/06/25'),
        YEARWEEK('2030,06,25'),
        YEARWEEK('2030:06:25'),
        YEARWEEK('2030;06!25');

    結果(垂直出力を使用):

    YEARWEEK('2030/06/25'): 203025
    YEARWEEK('2030,06,25'): 203025
    YEARWEEK('2030:06:25'): 203025
    YEARWEEK('2030;06!25'): 203025

    現在の日付

    NOW()を渡すことができます 現在の日付を使用する日時引数として:

    SELECT 
        NOW(),
        YEARWEEK(NOW());

    結果:

    +---------------------+-----------------+
    | NOW()               | YEARWEEK(NOW()) |
    +---------------------+-----------------+
    | 2021-05-17 09:08:23 |          202120 |
    +---------------------+-----------------+

    無効な引数

    無効な引数が渡されると、YEARWEEK() nullを返します :

    SELECT YEARWEEK('2030-65-78');

    結果:

    +------------------------+
    | YEARWEEK('2030-65-78') |
    +------------------------+
    |                   NULL |
    +------------------------+
    1 row in set, 1 warning (0.000 sec)

    警告を表示しましょう:

    SHOW WARNINGS;

    結果:

    +---------+------+----------------------------------------+
    | Level   | Code | Message                                |
    +---------+------+----------------------------------------+
    | Warning | 1292 | Incorrect datetime value: '2030-65-78' |
    +---------+------+----------------------------------------+

    引数がありません

    YEARWEEK()を呼び出す 引数の数が間違っているか、引数を渡さないと、エラーが発生します:

    SELECT YEARWEEK();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'

    そして別の例:

    SELECT YEARWEEK('2030-12-10', 1, 2);

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'

    1. SQL Server(T-SQL)のプロファイルからデータベースメールアカウントを削除する方法

    2. SQLServerのgroupby列とともにコンマ区切り文字で集計結果を取得するSQLクエリ

    3. データモデル

    4. MySQLで通知用のデータベースを設計するためのガイド