日付と時刻の値の操作¶
日付と時刻の計算は、分析とデータマイニングで最も広く使用され、最も重要な計算の1つです。このトピックでは、一般的な日付と時刻のクエリと計算の実用的な例を示します。
日付とタイムスタンプのロード¶
このセクションでは、日付とタイムスタンプの値をロードする例と、これらの値をロードする際のタイムゾーンに関する考慮事項について説明します。
タイムゾーンがないタイムスタンプのロード¶
次の例では、 TIMESTAMP_TYPE_MAPPING パラメーターは TIMESTAMP_LTZ (ローカルタイムゾーン)に設定されています。 TIMEZONE パラメーターが America/Chicago に設定されている場合、入力されるタイムスタンプにタイムゾーンが指定されていない場合、Snowflakeは、タイムスタンプが TIMEZONE パラメーターに設定されたタイムゾーンのローカル時間を表すものとして、これらの文字列をロードします。
タイムゾーンが付与されたタイムスタンプのロード¶
次の例では、 TIMESTAMP_TYPE_MAPPING パラメーターは TIMESTAMP_LTZ (ローカルタイムゾーン)に設定されています。 TIMEZONE パラメーターが America/Chicago に設定されている場合、受信タイムスタンプに異なるタイムゾーンが指定されている場合、Snowflakeは文字列を America/Chicago 時間の文字列にロードします。
別のタイムゾーンへのタイムスタンプの変換¶
次の例では、タイムゾーンデータがない一連のタイムスタンプ値が保存されます。タイムスタンプは UTC 時間でロードされ、他のタイムゾーンに変換されます。
テーブルの日付列への有効な日付文字列の挿入¶
この例では、 DATE 列に値を挿入します。
TO_DATE 関数は、 TIMESTAMP 値および TIMESTAMP 形式の文字列も受け入れますが、時間情報(時間、分など)は破棄します。
時刻のみで定義された DATE を挿入する場合、デフォルトの日付は1970年1月1日です。
DATE の値を取得する際、 TIMESTAMP の値としてフォーマットすることができます。
現在の日付および時刻の取得¶
現在の日付を DATE 値として取得します。
現在の日付および時刻を TIMESTAMP 値として取得します。
日付および曜日の取得¶
EXTRACT 関数を使用して、現在の曜日を数値として取得します。
注釈
dayofweek_iso部分は、 ISO-8601データ要素と交換形式の標準に従います。この関数は、曜日を1-7の範囲の整数値として返します。1は月曜日を表します。他のいくつかのシステムとの互換性のために、
dayofweek部分は UNIX 標準に従います。この関数は、曜日を整数値として0-6の範囲で返します。0は日曜日を表します。
TO_VARCHAR または DECODE 関数を使用して、現在の曜日を文字列として取得します。
現在の日付の短い英語名(例: Sun、 Mon など)を返すクエリを実行します。
明示的に指定された現在の日付の曜日名を返すクエリを実行します。
日付および時刻の一部の取得¶
DATE_PART 関数を使用して、現在の日付および時刻のさまざまな部分を取得します。
現在の月日を問い合わせるクエリ:
今年度のクエリ:
当月のクエリ:
現在の時間を問い合わせるクエリ:
現在の分を問い合わせるクエリ:
現在の秒数を問い合わせるクエリ:
EXTRACT 関数を使用して、現在の日付および時刻のさまざまな部分を取得します。
現在の月日を問い合わせるクエリ:
今年度のクエリ:
当月のクエリ:
現在の時間を問い合わせるクエリ:
現在の分を問い合わせるクエリ:
現在の秒数を問い合わせるクエリ:
このクエリは、現在の日付と時刻の様々な日付と時刻の部分を持つ表形式の出力を返します。
ビジネスカレンダーの日付および時刻の計算¶
DATE_TRUNC 関数を使用して、月の最初の日を DATE 値として取得します。たとえば、現在の月の最初の日を取得します。
DATEADD および DATE_TRUNC 関数を使用して、今月の最終日を DATE 値として取得します。
代替オプションとして、次の例では、 DATE_TRUNC は現在の月の初めを取得し、1か月を追加して翌月の初めを取得し、1日を減算して現在の月の最終日を決定します。
前月の最終日を DATE 値として取得します。
現在の月の短い英語名(例: Jan、 Dec など)を取得します。
明示的に指定された月名を用いて現在の月名を取得します。
現在の週の月曜日の日付を取得します。
現在の週の金曜日の日付を取得します。
DATE_PART 関数を使用して、今月の最初の月曜日の日付を取得します。
注釈
上記のクエリでは、 7 + 1 の 1 値は月曜日に変換されます。最初の火曜日、水曜日などの日付を取得するには、それぞれ 2 、 3 、 7 を Sunday などに置き換えます。
現在の年の初日を DATE 値として取得します。
現在の年の最後の日を DATE 値として取得します。
前年の最終日を DATE 値として取得します。
現在の四半期の初日を DATE 値として取得します。
現在の四半期の最終日を DATE 値として取得します。
当日の真夜中の日付とタイムスタンプを取得します。
日付および時刻の値の増加¶
DATEADD 関数を使用して、日付と時刻の値をインクリメントします。
現在の日付に2年を追加します。
現在の日付に2日を追加します。
現在の日時に2時間を追加します。
現在の日付と時刻に2分を追加します。
現在の日付と時刻に2秒を追加します。
有効な文字列を日付、時刻、またはタイムスタンプへの変換¶
ほとんどのユースケースでは、Snowflakeは文字列としてフォーマットされた日付とタイムスタンプの値を正しく処理します。文字列ベースの比較などの特定の場合、または結果がセッションパラメーターで設定されたものとは異なるタイムスタンプ形式に依存する場合、予期しない結果を避けるために値を目的の形式に明示的に変換することを推奨します。
たとえば、明示的なキャストなしで、文字列値を比較すると、文字列ベースの結果が生成されます。
以下のクエリは、明示的なキャストなしで比較を実行します。
次のクエリは、 DATE への明示的なキャストで比較を実行します。
変換関数の詳細については、 変換関数の日付と時刻の形式 をご参照ください。
日付演算の日付文字列への適用¶
文字列で表現された日付に5日を追加します。
DATEDIFF 関数を使用して、現在の日付と文字列で表現された日付の日数の差を計算します。
TO_TIMESTAMP 関数を使って日数の差を計算します。
TO_DATE 関数を使って日数の差を計算します。
指定した日付に1日を追加します。
現在の日付から9日引く(例:2024年8月28日):
日付または時刻の差の計算¶
現在の日付と3年後の日付の差を計算します。
現在の日付と3か月後の日付の差を計算します。
現在の日付と3日後の日付の差を計算します。
現在の時刻と3時間後の時刻との差を計算します。
現在の時刻と3分後の時刻との差を計算します。
現在の時刻と3秒後の時刻との差を計算します。