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

SQL Server(T-SQL)の日付からISO週番号を返す

    SQL Serverの日付からISO週番号を抽出する必要がある場合は、iso_weekを使用できます。 DATEPART()を呼び出すときの引数 働き。または、isowkを使用することもできます またはisoww 同じことをするための議論。

    「ISO週」とは、ISO8601の日付と時刻の標準を指します。

    ISO週は月曜日に始まり、年の最初の週にはその年の1月4日が含まれます。したがって、1月上旬の日付は前年の第52週または第53週の一部になり、12月下旬の日付は翌年の第1週の一部になる可能性があります。

    つまり、日付から週番号を抽出すると、グレゴリオ暦を使用しているか、ISO8601の日付と時刻の標準を使用しているかによって異なる結果が得られる可能性があります。

    DECLARE @date date = '2021-01-01';
    SELECT DATEPART(iso_week, @date);

    結果:

    53

    この場合、日付は2021年1月1日ですが、ISO用語では、2020年の53週目です。

    グレゴリオ暦との比較

    グレゴリオ暦の週と比較する別の例を次に示します。

    DECLARE @date date = '2021-01-01';
    SELECT 
      DATEPART(week, @date) AS week,
      DATEPART(iso_week, @date) AS iso_week;

    結果:

    +--------+------------+
     | week   | iso_week   |
     |--------+------------|
     | 1      | 53         |
     +--------+------------+ 

    したがって、グレゴリオ暦を使用しているかISO標準を使用しているかによって、同じ日付の週番号が異なる可能性があることがわかります。

    前年末に近い日付でも同じことができます。

    DECLARE @date date = '2020-12-27';
    SELECT 
      DATEPART(week, @date) AS week,
      DATEPART(iso_week, @date) AS iso_week;

    結果:

    +--------+------------+
     | week   | iso_week   |
     |--------+------------|
     | 53     | 52         |
     +--------+------------+ 

    代替引数

    前述のように、代わりにisowkを使用できます またはisoww ISOの週番号を返します。

    DECLARE @date date = '2021-01-01';
    SELECT 
        DATEPART(iso_week, @date) AS iso_week,
        DATEPART(isowk, @date) AS isowk,
        DATEPART(isoww, @date) AS isoww;

    結果:

    +------------+---------+---------+
     | iso_week   | isowk   | isoww   |
     |------------+---------+---------|
     | 53         | 53      | 53      |
     +------------+---------+---------+ 

    1. 2つの既知の文字列から文字列を選択するSQLクエリ

    2. 失敗した挿入でMySQLの自動インクリメントが増加するのはなぜですか?

    3. OracleのTRUNC(number)関数

    4. 正規表現またはLIKEパターンのエスケープ関数