ClickHouse/docs/ja/sql_reference/data_types/datetime.md
2020-04-04 12:15:31 +03:00

6.5 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true d734a8e46d 48 DateTime

Datetime

カレンダーの日付と時刻として表現することができ、時間内にインスタントを格納することができます。

構文:

DateTime([timezone])

サポートされる値の範囲: [1970-01-01 00:00:00, 2105-12-31 23:59:59].

解像度:1秒。

使用上の注意

のとして保存すると、 Unix timestamp タイムゾーンまたは夏時間に関係なく。 さらに、 DateTime タイプは、列全体で同じタイムゾーンを格納することができます。 DateTime 型の値は、テキスト形式で表示され、文字列として指定された値がどのように解析されますか (2020-01-01 05:00:01). タイムゾーンはテーブルの行(またはresultset)に格納されず、列のメタデータに格納されます。 リストの対応時間帯の IANA時間帯のデータベース. その tzdata パッケージ、含む IANA時間帯のデータベース、システムに取付けられているべきです。 を使用 timedatectl list-timezones ローカルシステ

タイムゾーンを明示的に設定することができます DateTime-テーブルを作成するときに列を入力します。 タイムゾーンが設定されていない場合、ClickHouseはタイムゾーンの値を使用します。 タイムゾーン クリックハウスサーバーの起動時にサーバー設定またはオペレーティングシステム設定のパラメータ。

その クリックハウス-顧客 データ型の初期化時にタイムゾーンが明示的に設定されていない場合は、既定でサーバーのタイムゾーンを適用します。 クライアントのタイムゾーンを使用するには clickhouse-client--use_client_time_zone パラメータ。

ClickHouse出力値で YYYY-MM-DD hh:mm:ss デフォルトではテキスト形式。 出力を変更するには、次のようにします formatDateTime 機能。

ClickHouseにデータを挿入するときは、日付と時刻の文字列の異なる形式を使用することができます。 date_time_input_format 設定。

1. テーブルを作成する DateTime-列を入力してデータを挿入する:

CREATE TABLE dt
(
    `timestamp` DateTime('Europe/Moscow'),
    `event_id` UInt8
)
ENGINE = TinyLog;
INSERT INTO dt Values (1546300800, 1), ('2019-01-01 00:00:00', 2);
SELECT * FROM dt;
┌───────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00 │        1 │
│ 2019-01-01 00:00:00 │        2 │
└─────────────────────┴──────────┘
  • Datetimeを整数として挿入すると、UnixタイムスタンプUTCとして扱われます。 1546300800 を表します '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 タイムゾーンとして保存 1546290000.

2. フィルタリング DateTime

SELECT * FROM dt WHERE timestamp = toDateTime('2019-01-01 00:00:00', 'Europe/Moscow')
┌───────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00 │        2 │
└─────────────────────┴──────────┘

DateTime 列の値は、文字列値を使用してフィルター処理できます。 WHERE 述語。 それはに変換されます DateTime 自動的に:

SELECT * FROM dt WHERE timestamp = '2019-01-01 00:00:00'
┌───────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00 │        1 │
└─────────────────────┴──────────┘

3. Aのタイムゾーンを取得する DateTime-タイプ列:

SELECT toDateTime(now(), 'Europe/Moscow') AS column, toTypeName(column) AS x
┌──────────────column─┬─x─────────────────────────┐
│ 2019-10-16 04:12:04 │ DateTime('Europe/Moscow') │
└─────────────────────┴───────────────────────────┘

4. タイムゾーン変換

SELECT
toDateTime(timestamp, 'Europe/London') as lon_time,
toDateTime(timestamp, 'Europe/Moscow') as mos_time
FROM dt
┌───────────lon_time──┬────────────mos_time─┐
│ 2019-01-01 00:00:00 │ 2019-01-01 03:00:00 │
│ 2018-12-31 21:00:00 │ 2019-01-01 00:00:00 │
└─────────────────────┴─────────────────────┘

また見なさい

元の記事