TO_TIME , TIME¶
入力式を時刻に変換します。
- こちらもご参照ください。
構文¶
TO_TIME( <string_expr> [, <format> ] )
TO_TIME( <timestamp_expr> )
TO_TIME( '<integer>' )
TO_TIME( <variant_expr> )
TIME( <string_expr> )
TIME( <timestamp_expr> )
TIME( '<integer>' )
TIME( <variant_expr> )
引数¶
必須:
string_expr
またはtimestamp_expr
または'integer'
またはvariant_expr
時刻に変換される式です。
string_expr
の場合は、時刻に変換する文字列。timestamp_expr
の場合は、時刻に変換するタイムスタンプ。関数は、入力値の時間部分を返します。'integer'
の場合は、時刻に変換する整数を含む文字列。整数は、Unixエポック開始後の秒数、ミリ秒、マイクロ秒、またはナノ秒として扱われます。 使用上の注意 をご参照ください。このタイムスタンプの場合、関数はUnixエポック開始後の秒数を取得します。この関数は、 モジュロ演算 を実行して、この数値を1日の秒数(
86400
)で割った余りを取得します。number_of_seconds % 86400
関数は、この残りを午前0時からの秒数として解釈します。
たとえば、値が
'31536002789'
であるとします。この値の大きさに基づいて、関数は時間の単位としてミリ秒を使用し、値が
1971-01-01 00:00:02.789
を表していると判断します。この関数は、この値(
31536002
)のUnixエポック後の秒数を取得します。この関数は、その数値を1日の秒数(
31536002 % 86400
)で割った余りを取得します。この関数は、残り(
2
)を午前0時からの秒数として使用します。結果の時間は00:00:02
です。
variant_expr
の場合:VARIANT に文字列が TIME 形式(
HH:MI:SS
など)で含まれている場合は、文字列変換が実行されます。VARIANT に文字列がINTEGER 形式で含まれている場合は、文字列変換が実行され、値は午前0時からの秒数として扱われます(必要に応じてモジュラス86400)。
VARIANT に JSON のNULL値が含まれていると、出力は NULL になります。
他のすべての値については、変換エラーが生成されます。
オプション:
format
string_expr
または AUTO の時間形式指定子。これは、Snowflakeが使用する形式を自動的に検出することを指定します。詳細については、 変換関数の日付と時刻の形式 をご参照ください。デフォルト: TIME_INPUT_FORMAT セッションパラメーターの現在の値(デフォルトは AUTO)
戻り値¶
戻り値のデータ型は TIME です。入力が NULL の場合は NULL を返します。
使用上の注意¶
出力における時間の表示形式は、 TIME_OUTPUT_FORMAT セッションパラメーター(デフォルト
HH24:MI:SS
)によって決定されます。入力パラメーターの形式が整数を含む文字列の場合、値の測定単位(秒、マイクロ秒、ミリ秒、またはナノ秒)は次のように決定されます。
文字列が整数に変換された後、Unixエポックの開始後の秒数、ミリ秒、マイクロ秒、またはナノ秒として整数が扱われます(1970-01-01 00:00:00.000000000 UTC)。
整数が31536000000(1年のミリ秒数)より小さい場合、値は秒数として扱われます。
値が31536000000以上で31536000000000未満の場合、値はミリ秒として扱われます。
値が31536000000000以上で31536000000000000より小さい場合、値はマイクロ秒として扱われます。
値が31536000000000000以上の場合、値はナノ秒として扱われます。
複数の行が評価される場合(例: 入力が複数の行を含むテーブルの列名である場合)、値が秒、ミリ秒、マイクロ秒、またはナノ秒を表しているかどうかを判断するために、各値が個別に検査されます。
TO_TIME 関数とは異なり、 TIME 関数はオプションの
format
パラメーターをサポートしていません。
例¶
これらの例では、 TO_TIME と TIME 関数を使用しています。
SELECT TO_TIME('13:30:00'), TIME('13:30:00');
+---------------------+------------------+
| TO_TIME('13:30:00') | TIME('13:30:00') |
|---------------------+------------------|
| 13:30:00 | 13:30:00 |
+---------------------+------------------+
SELECT TO_TIME('13:30:00.000'), TIME('13:30:00.000');
+-------------------------+----------------------+
| TO_TIME('13:30:00.000') | TIME('13:30:00.000') |
|-------------------------+----------------------|
| 13:30:00 | 13:30:00 |
+-------------------------+----------------------+
この例では、 TO_TIME 関数を使用して、デフォルトのコロン以外のフィールド区切り文字を処理する方法を示します。この例では、時間と分、分と秒の区切り文字としてピリオド文字を使用しています。
SELECT TO_TIME('11.15.00', 'HH24.MI.SS');
+-----------------------------------+
| TO_TIME('11.15.00', 'HH24.MI.SS') |
|-----------------------------------|
| 11:15:00 |
+-----------------------------------+
この例は、 TO_TIME 関数が整数を含む文字列を解釈する方法を示しています。
CREATE OR REPLACE TABLE demo1_time (
description VARCHAR,
value VARCHAR -- string rather than bigint
);
INSERT INTO demo1_time (description, value) VALUES
('Seconds', '31536001'),
('Milliseconds', '31536002400'),
('Microseconds', '31536003600000'),
('Nanoseconds', '31536004900000000');
SELECT description,
value,
TO_TIMESTAMP(value),
TO_TIME(value)
FROM demo1_time
ORDER BY value;
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION | VALUE | TO_TIMESTAMP(VALUE) | TO_TIME(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds | 31536001 | 1971-01-01 00:00:01.000 | 00:00:01 |
| Milliseconds | 31536002400 | 1971-01-01 00:00:02.400 | 00:00:02 |
| Microseconds | 31536003600000 | 1971-01-01 00:00:03.600 | 00:00:03 |
| Nanoseconds | 31536004900000000 | 1971-01-01 00:00:04.900 | 00:00:04 |
+--------------+-------------------+-------------------------+----------------+