TO_DATE , DATE¶
入力式を日付に変換します。
VARCHAR 式の場合は、文字列を日付に変換した結果。
TIMESTAMP 式の場合は、タイムスタンプからの日付。
VARIANT 式の場合は、
VARIANT に文字列が含まれていると、文字列変換が実行されます。
VARIANT に日付が含まれていると、日付値はそのまま保持されます。
VARIANT に JSON のNULL値が含まれていると、出力は NULL になります。
NULL 入力の場合、出力は NULLです。
他のすべての値については、変換エラーが生成されます。
- こちらもご参照ください。
構文¶
TO_DATE( <string_expr> [, <format> ] )
TO_DATE( <timestamp_expr> )
TO_DATE( '<integer>' )
TO_DATE( <variant_expr> )
DATE( <string_expr> [, <format> ] )
DATE( <timestamp_expr> )
DATE( '<integer>' )
DATE( <variant_expr> )
引数¶
必須:
次のいずれか:
string_expr
日付を抽出する文字列。例:
'2024-01-31'
。timestamp_expr
TIMESTAMP 式。TIMESTAMP 値の DATE 部分が抽出されます。
'integer'
整数を含む文字列に評価される式。例:
'15000000'
。文字列の大きさに応じて、秒、ミリ秒、マイクロ秒、またはナノ秒として解釈できます。詳細については、この関数の 使用上の注意 をご参照ください。variant_expr
VARIANT 型の式。
VARIANT には次のいずれかが含まれている必要があります。
日付を抽出する文字列。
日付。
秒またはミリ秒の数値を表現する整数を含む文字列。
TO_DATE は TIMESTAMP 値を受け入れますが、 VARIANT 内の TIMESTAMP 値は受け入れません。
オプション:
format
string_expr
または AUTO の日付形式指定子。これは、Snowflakeが使用する形式を自動的に検出することを指定します。詳細については、 変換関数の日付と時刻の形式 をご参照ください。デフォルトは、 DATE_INPUT_FORMAT セッションパラメーターの現在の値です(デフォルトは
AUTO
)。
戻り値¶
戻り値のデータ型は DATE です。入力が NULL の場合は NULL を返します。
使用上の注意¶
出力における日付の表示形式は、 DATE_OUTPUT_FORMAT セッションパラメーター(デフォルト
YYYY-MM-DD
)によって決定されます。入力パラメーターの形式が整数を含む文字列の場合:
文字列が整数に変換された後、Unixエポックの開始後の秒数、ミリ秒、マイクロ秒、またはナノ秒として整数が扱われます(1970-01-01 00:00:00.000000000 UTC)。
整数が31536000000(1年のミリ秒数)より小さい場合、値は秒数として扱われます。
値が31536000000以上で31536000000000未満の場合、値はミリ秒として扱われます。
値が31536000000000以上で31536000000000000より小さい場合、値はマイクロ秒として扱われます。
値が31536000000000000以上の場合、値はナノ秒として扱われます。
複数の行が評価される場合(例: 入力が複数の行を含むテーブルの列名である場合)、値が秒、ミリ秒、マイクロ秒、またはナノ秒を表しているかどうかを判断するために、各値が個別に検査されます。
例¶
以下の例では、 TO_DATE と DATE 関数を使用しています。
基本的な例¶
SELECT TO_DATE('2024-05-10'), DATE('2024-05-10');
+-----------------------+--------------------+
| TO_DATE('2024-05-10') | DATE('2024-05-10') |
|-----------------------+--------------------|
| 2024-05-10 | 2024-05-10 |
+-----------------------+--------------------+
タイムスタンプから日付を抽出する例¶
TO_DATE 関数は、 TIMESTAMP 値および TIMESTAMP 形式の文字列も受け入れますが、時間情報(時間、分など)は破棄します。
テーブルを作成してロードします。
CREATE OR REPLACE TABLE date_from_timestamp(ts TIMESTAMP);
INSERT INTO date_from_timestamp(ts)
VALUES (TO_TIMESTAMP('2024.10.02 04:00:00', 'YYYY.MM.DD HH:MI:SS'));
テーブルの TIMESTAMP 値をクエリします。
SELECT ts FROM date_from_timestamp;
+-------------------------+
| TS |
|-------------------------|
| 2024-10-02 04:00:00.000 |
+-------------------------+
TO_DATE 関数を使用して、テーブルの TIMESTAMP 値をクエリします。
SELECT TO_DATE(ts) FROM date_from_timestamp;
+-------------+
| TO_DATE(TS) |
|-------------|
| 2024-10-02 |
+-------------+
異なる入力形式を使用する例¶
以下の例では、 TO_DATE と DATE 関数を異なる入力形式指定で使用しています。返される出力の日付形式は、 DATE_OUTPUT_FORMAT セッションパラメーターの設定によって決まります。
SELECT TO_DATE('2024.05.10', 'YYYY.MM.DD'), DATE('2024.05.10', 'YYYY.MM.DD');
+-------------------------------------+----------------------------------+
| TO_DATE('2024.05.10', 'YYYY.MM.DD') | DATE('2024.05.10', 'YYYY.MM.DD') |
|-------------------------------------+----------------------------------|
| 2024-05-10 | 2024-05-10 |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('2024-05-10', 'AUTO'), DATE('2024-05-10', 'AUTO');
+-------------------------------+----------------------------+
| TO_DATE('2024-05-10', 'AUTO') | DATE('2024-05-10', 'AUTO') |
|-------------------------------+----------------------------|
| 2024-05-10 | 2024-05-10 |
+-------------------------------+----------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/20/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 2024-05-10 | 2024-05-20 |
+-------------------------------------+----------------------------------+
異なる出力形式を使用する例¶
以下の例は、 DATE_OUTPUT_FORMAT セッションパラメーターを DD-MON-YYYY
に設定した場合のクエリの結果を示しています。
ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DD-MON-YYYY';
SELECT TO_DATE('2024-05-10', 'YYYY-MM-DD'), DATE('2024-05-10', 'YYYY-MM-DD');
+-------------------------------------+----------------------------------+
| TO_DATE('2024-05-10', 'YYYY-MM-DD') | DATE('2024-05-10', 'YYYY-MM-DD') |
|-------------------------------------+----------------------------------|
| 10-May-2024 | 10-May-2024 |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/10/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 10-May-2024 | 10-May-2024 |
+-------------------------------------+----------------------------------+
整数を含む文字列を使用する例¶
入力が整数を含む文字列の場合、その整数の大きさは、秒、ミリ秒などとして解釈されるかどうかに影響します。次の例は、値の大きさに基づいて、関数が使用する単位(秒、ミリ秒、マイクロ秒、またはナノ秒)を選択する方法を示しています。
テーブルを作成してロードします。
CREATE OR REPLACE TABLE demo1 (
description VARCHAR,
value VARCHAR -- string rather than bigint
);
INSERT INTO demo1 (description, value) VALUES
('Seconds', '31536000'),
('Milliseconds', '31536000000'),
('Microseconds', '31536000000000'),
('Nanoseconds', '31536000000000000');
文字列を関数に渡します。
SELECT description,
value,
TO_TIMESTAMP(value),
TO_DATE(value)
FROM demo1
ORDER BY value;
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION | VALUE | TO_TIMESTAMP(VALUE) | TO_DATE(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds | 31536000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
| Milliseconds | 31536000000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
| Microseconds | 31536000000000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
| Nanoseconds | 31536000000000000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
+--------------+-------------------+-------------------------+----------------+