メインコンテンツへスキップ
メインコンテンツへスキップ

Time64

データ型 Time64 は、小数秒を含む一日の時刻を表します。 日・月・年といった暦の要素は持ちません。 precision パラメータは小数部の桁数、すなわちティックサイズを定義します。

ティックサイズ(精度): 10-precision 秒。有効範囲: 0..9。よく使われる値は 3(ミリ秒)、6(マイクロ秒)、9(ナノ秒)です。

構文:

Time64(精度)

内部的には、Time64 は符号付き 64 ビットの 10 進数 (Decimal64) で秒の小数部分を保持します。 刻み幅は precision パラメータによって決まります。 タイムゾーンはサポートされていません。Time64 にタイムゾーンを指定するとエラーが発生します。

DateTime64 と異なり、Time64 は日付成分を保持しません。 Time も参照してください。

テキスト表現の範囲: precision = 3 の場合は [-999:59:59.000, 999:59:59.999] です。一般に、最小値は -999:59:59、最大値は 999:59:59 で、precision で指定された桁数までの小数を持つことができます (precision = 9 の場合、最小値は -999:59:59.999999999 です)。

実装の詳細

表現
小数点以下 precision 桁で表される小数秒をカウントする符号付き Decimal64 値。

正規化
文字列を Time64 にパースする際、時刻コンポーネントは正規化されますが、検証は行われません。
たとえば、25:70:7026:11:10 と解釈されます。

負の値
先頭のマイナス記号はサポートされ、そのまま保持されます。
負の値は通常、Time64 値に対する算術演算から生じます。
Time64 では、テキスト入力(例: '-01:02:03.123')および数値入力(例: -3723.123)のいずれの場合も、負の入力はそのまま保持されます。

飽和
時刻(time-of-day)コンポーネントは、コンポーネントへの変換やテキストへのシリアル化時に [-999:59:59.xxx, 999:59:59.xxx] の範囲に制限されます。
保存されている数値自体はこの範囲を超える場合がありますが、コンポーネントの抽出(時、分、秒)およびテキスト表現では、飽和させた値が使用されます。

タイムゾーン
Time64 はタイムゾーンをサポートしません。
Time64 型または値を作成する際にタイムゾーンを指定するとエラーが発生します。
同様に、Time64 カラムに対してタイムゾーンを適用したり変更したりする試みもサポートされず、エラーになります。

  1. Time64 型のカラムを持つテーブルを作成し、データを挿入する:
CREATE TABLE tab64
(
    `event_id` UInt8,
    `time` Time64(3)
)
ENGINE = TinyLog;
-- Time64を解析
-- - 文字列から
-- - 00:00:00からの秒数(小数部分は精度に従う)から
INSERT INTO tab64 VALUES (1, '14:30:25'), (2, 52225.123), (3, '14:30:25');

SELECT * FROM tab64 ORDER BY event_id;
   ┌─event_id─┬────────time─┐
1. │        1 │ 14:30:25.000 │
2. │        2 │ 14:30:25.123 │
3. │        3 │ 14:30:25.000 │
   └──────────┴──────────────┘
  1. Time64 値によるフィルタリング
SELECT * FROM tab64 WHERE time = toTime64('14:30:25', 3);
   ┌─event_id─┬────────time─┐
1. │        1 │ 14:30:25.000 │
2. │        3 │ 14:30:25.000 │
   └──────────┴──────────────┘
SELECT * FROM tab64 WHERE time = toTime64(52225.123, 3);
   ┌─event_id─┬────────time─┐
1. │        2 │ 14:30:25.123 │
   └──────────┴──────────────┘

Note: toTime64 は、指定された精度に従って数値リテラルを小数部付きの秒として解釈するため、意図する小数桁数を明示的に指定してください。

  1. 結果の型を確認する:
SELECT CAST('14:30:25.250' AS Time64(3)) AS column, toTypeName(column) AS type;
   ┌────────column─┬─type──────┐
1. │ 14:30:25.250 │ Time64(3) │
   └───────────────┴───────────┘

関連項目