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

MariaDBでのWEEK()のしくみ

    MariaDBでは、WEEK() は、指定された日付式から週を返す組み込みの日付と時刻の関数です。

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

    週を0の範囲の数値として返します 53へ または1 53へ 、使用しているモードによって異なります。

    構文

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

    WEEK(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 |
    +-----------------------+

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

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

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

    結果:

    +--------------------+
    | WEEK('2030-01-01') |
    +--------------------+
    |                  0 |
    +--------------------+

    モードを指定する

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

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

    結果:

    +-----------------------+
    | WEEK('2030-01-01', 1) |
    +-----------------------+
    |                     1 |
    +-----------------------+

    今回の結果は1です。 0の代わりに 。

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

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

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

    WEEK('2030-01-01', 0): 0
    WEEK('2030-01-01', 1): 1
    WEEK('2030-01-01', 2): 52
    WEEK('2030-01-01', 3): 1
    WEEK('2030-01-01', 4): 1
    WEEK('2030-01-01', 5): 0
    WEEK('2030-01-01', 6): 1
    WEEK('2030-01-01', 7): 53

    日時の値

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

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

    結果:

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

    数値日付

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

    SELECT WEEK(20301125);

    結果:

    +----------------+
    | WEEK(20301125) |
    +----------------+
    |             47 |
    +----------------+

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

    SELECT WEEK(301125);

    結果:

    +--------------+
    | WEEK(301125) |
    +--------------+
    |           47 |
    +--------------+

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

    SELECT WEEK(20301135);

    結果:

    +----------------+
    | WEEK(20301135) |
    +----------------+
    |           NULL |
    +----------------+
    1 row in set, 1 warning (0.001 sec)

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

    警告を見てみましょう:

    SHOW WARNINGS;

    結果:

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

    その他の区切り文字

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

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

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

    WEEK('2030/06/25'): 25
    WEEK('2030,06,25'): 25
    WEEK('2030:06:25'): 25
    WEEK('2030;06!25'): 25

    現在の日付

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

    SELECT 
        NOW(),
        WEEK(NOW());

    結果:

    +---------------------+-------------+
    | NOW()               | WEEK(NOW()) |
    +---------------------+-------------+
    | 2021-05-17 08:36:12 |          20 |
    +---------------------+-------------+

    無効な引数

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

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

    結果:

    +--------------------+
    | WEEK('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' |
    +---------+------+----------------------------------------+

    引数がありません

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

    SELECT WEEK();

    結果:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

    そして別の例:

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

    結果:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 2)' at line 1

    1. 高速テストのためにPostgreSQLを最適化する

    2. SQL UPDATE構文–DBMSによってリストされます

    3. 開発スナップショットのテーブルの一部のみのPostgresダンプ

    4. DbVisualizerでのODBCデータの操作