mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-10-19 15:01:03 +00:00
d91c97d15d
* Replace underscores with hyphens * remove temporary code * fix style check * fix collapse
4.8 KiB
4.8 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | d734a8e46d |
49 | DateTime64 |
Datetime64
定義されたサブ秒の精度で、カレンダーの日付と時刻として表現することができる時刻にインスタントを格納することができます
目盛りサイズ(精度):10-精密 秒
構文:
DateTime64(precision, [timezone])
内部的には、データを次の数として格納します ‘ticks’ エポックスタート(1970-01-01 00:00:00UTC)はInt64です。 目盛りの分解能は、precisionパラメーターによって決まります。 さらに、 DateTime64
タイプは、列全体で同じタイムゾーンを格納することができます。 DateTime64
型の値は、テキスト形式で表示され、文字列として指定された値がどのように解析されますか (‘2020-01-01 05:00:01.000’). タイムゾーンはテーブルの行(またはresultset)に格納されず、列のメタデータに格納されます。 詳細はこちら DateTime.
例
1. テーブルの作成 DateTime64
-列を入力してデータを挿入する:
CREATE TABLE dt
(
`timestamp` DateTime64(3, 'Europe/Moscow'),
`event_id` UInt8
)
ENGINE = TinyLog
INSERT INTO dt Values (1546300800000, 1), ('2019-01-01 00:00:00', 2)
SELECT * FROM dt
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.000 │ 1 │
│ 2019-01-01 00:00:00.000 │ 2 │
└─────────────────────────┴──────────┘
- Datetimeを整数として挿入すると、適切にスケーリングされたUnixタイムスタンプ(UTC)として扱われます。
1546300800000
(精度3)を表します'2019-01-01 00:00:00'
UTC。 しかし、としてtimestamp
列はEurope/Moscow
(UTC+3)タイムゾーン指定、文字列として出力すると、値は次のように表示されます'2019-01-01 03:00:00'
- 文字列値をdatetimeとして挿入すると、列timezoneにあるものとして扱われます。
'2019-01-01 00:00:00'
れる。Europe/Moscow
タイムゾーンとして保存1546290000000
.
2. フィルタリング DateTime64
値
SELECT * FROM dt WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Europe/Moscow')
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00.000 │ 2 │
└─────────────────────────┴──────────┘
とは異なり DateTime
, DateTime64
値は変換されません String
自動的に
3. Aのタイムゾーンを取得する DateTime64
-タイプ値:
SELECT toDateTime64(now(), 3, 'Europe/Moscow') AS column, toTypeName(column) AS x
┌──────────────────column─┬─x──────────────────────────────┐
│ 2019-10-16 04:12:04.000 │ DateTime64(3, 'Europe/Moscow') │
└─────────────────────────┴────────────────────────────────┘
4. タイムゾーン変換
SELECT
toDateTime64(timestamp, 3, 'Europe/London') as lon_time,
toDateTime64(timestamp, 3, 'Europe/Moscow') as mos_time
FROM dt
┌───────────────lon_time──┬────────────────mos_time─┐
│ 2019-01-01 00:00:00.000 │ 2019-01-01 03:00:00.000 │
│ 2018-12-31 21:00:00.000 │ 2019-01-01 00:00:00.000 │
└─────────────────────────┴─────────────────────────┘