0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Snowflake] 指定した日付間の日付一覧を作成するクエリを書いてみた

Posted at
arr AS (
  SELECT
    ARRAY_GENERATE_RANGE(
      0, 
      DATEDIFF('DAY', '2023-07-01', '2023-07-10') + 1
    )
)

この部分で [0, 1, 2, 3, … 9] という、10個の要素を持つ ARRAY を作成しています。10個なのは 2023-07-01 ~ 2023-07-10 までの日数が10日間だからで
す。DATE_DIFFで計算しています。

dates AS (
  SELECT
    DATEADD('DAY', value, DATE('2023-07-01')) AS date
  FROM
    TABLE(FLATTEN(INPUT => SELECT * FROM arr))
)

ここでは、先程の部分で作成される ARRAY を FLATTEN を使って行に展開し TABLE関数 で読み込んでいます。
最後に ARRAY の各要素 (0 … 9) を 2023-07-01 に DATE_ADD してやると完成です。
※ FLATTENでARRAYを展開すると、6列 × ARRAYの要素数 のデータが出力され、VALUEという列にARRAYの各要素が格納されます [参考]

日付一覧に加え、曜日などの情報を付加してviewにしておくと便利だと思います。

CREATE OR REPLACE VIEW calendar AS 

WITH
arr AS (
  SELECT
    ARRAY_GENERATE_RANGE(
      0, 
      DATEDIFF('DAY', '2023-07-01', '2023-07-10') + 1
    )
),

dates AS (
  SELECT
    DATEADD('DAY', value, DATE('2023-07-01')) AS date
  FROM
    TABLE(FLATTEN(INPUT => SELECT * FROM arr))
)

SELECT 
  date,
  EXTRACT(YEAR FROM date) AS year,
  EXTRACT(MONTH FROM date) as month,
  EXTRACT(DAY FROM date) AS day,
  EXTRACT(DOW FROM date) AS dow,
  DAYNAME(date) AS day_name
FROM
  dates

指定した日付からN日間の日付一覧を得るクエリ

指定した2つの日付間ではなく、指定した日からN日間の日付一覧であれば、以下の様にもっとシンプルに書くこともできます。

-- 2023-07-01から10日間の日付一覧を得るクエリ
SELECT
  DATEADD('DAY', seq1(), DATE('2023-07-01')) AS date
FROM
  TABLE(GENERATOR(rowcount => 10))
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?