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