Skip to content

Commit 0ea01c8

Browse files
authored
docs: add TIMESTAMP_TZ data type documentation (#2938)
- Add TIMESTAMP_TZ type to datetime data types table - Add separate sections for DATE, TIMESTAMP, and TIMESTAMP_TZ with examples - Include timezone behavior explanations and use cases - Update version to v1.2.834 - Fix table formatting alignment - Add both English and Chinese documentation
1 parent 6711085 commit 0ea01c8

File tree

2 files changed

+181
-225
lines changed
  • docs
    • cn/sql-reference/00-sql-reference/10-data-types
    • en/sql-reference/00-sql-reference/10-data-types

2 files changed

+181
-225
lines changed

docs/cn/sql-reference/00-sql-reference/10-data-types/datetime.md

Lines changed: 92 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -5,168 +5,146 @@ description: Databend 的日期和时间数据类型支持标准化,并与各
55

66
import FunctionDescription from '@site/src/components/FunctionDescription';
77

8-
<FunctionDescription description="引入或更新于: v1.2.745"/>
8+
<FunctionDescription description="引入或更新于: v1.2.834"/>
99

1010
## 日期和时间数据类型
1111

1212
| 名称 | 别名 | 存储大小 | 精度 | 最小值 | 最大值 | 格式 |
1313
|-----------|----------|----------|-------------|----------------------------|--------------------------------|--------------------------------------------------------------------------------|
1414
| DATE | | 4 字节 || 0001-01-01 | 9999-12-31 | `YYYY-MM-DD` |
1515
| TIMESTAMP | DATETIME | 8 字节 | 微秒 | 0001-01-01 00:00:00.000000 | 9999-12-31 23:59:59.999999 UTC | `YYYY-MM-DD hh:mm:ss[.fraction]`,支持最多 6 位微秒精度 |
16+
| TIMESTAMP_TZ | TIMESTAMP WITH TIME ZONE | 8 字节 | 微秒 | 0001-01-01 00:00:00.000000 | 9999-12-31 23:59:59.999999 UTC | `YYYY-MM-DD hh:mm:ss[.fraction]±hh:mm`,存储 UTC 值和时区偏移 |
1617

18+
## DATE
1719

18-
## 示例
20+
DATE 类型用于存储日历日期(年、月、日)。
1921

2022
```sql
21-
CREATE TABLE test_dt
22-
(
23-
date DATE,
24-
ts TIMESTAMP
25-
);
26-
```
23+
CREATE TABLE events (
24+
event_date DATE
25+
);
2726

28-
```sql
29-
DESC test_dt;
30-
```
27+
INSERT INTO events VALUES
28+
('2024-01-15'),
29+
('2024-12-31');
3130

32-
结果:
31+
SELECT * FROM events;
32+
```
3333

34+
结果:
3435
```
35-
┌────────────────────────────────────────────────
36-
Field │ Type │ Null │ Default │ Extra
37-
├────────┼───────────┼────────┼─────────┼────────┤
38-
date │ DATE │ YES │ NULL │
39-
ts │ TIMESTAMP │ YES │ NULL │
40-
└────────────────────────────────────────────────
36+
┌────────────┐
37+
event_date
38+
├────────────┤
39+
2024-01-15
40+
2024-12-31
41+
└────────────┘
4142
```
4243

43-
TIMESTAMP 值可以选择性地包含尾随的小数秒部分,精度最高可达微秒 (6 位数字)。
44+
## TIMESTAMP
45+
46+
TIMESTAMP 在内部以 UTC 格式存储时间点,但会根据会话的时区设置来显示。当您希望不同用户在各自的本地时区查看时间时,这很有用。
4447

4548
```sql
46-
-- 向表中插入值
47-
INSERT INTO test_dt
48-
VALUES
49-
('2022-04-07', '2022-04-07 01:01:01.123456'),
50-
('2022-04-08', '2022-04-08 01:01:01');
51-
52-
SELECT *
53-
FROM test_dt;
54-
```
49+
CREATE TABLE meetings (
50+
meeting_id INT,
51+
meeting_time TIMESTAMP
52+
);
5553

56-
结果:
54+
-- 插入一个会议时间
55+
INSERT INTO meetings VALUES (1, '2024-01-15 14:00:00+08:00');
5756

58-
```
59-
┌─────────────────────────────────────────────┐
60-
│ date │ ts │
61-
├────────────────┼────────────────────────────┤
62-
│ 2022-04-07 │ 2022-04-07 01:01:01.123456 │
63-
│ 2022-04-08 │ 2022-04-08 01:01:01 │
64-
└─────────────────────────────────────────────┘
57+
-- 在 UTC 时区查看
58+
SET timezone = 'UTC';
59+
SELECT * FROM meetings;
6560
```
6661

67-
Databend 识别多种格式的 TIMESTAMP 值。
68-
69-
```sql
70-
-- 创建表来测试不同的时间戳格式
71-
CREATE TABLE test_formats (
72-
id INT,
73-
a TIMESTAMP
74-
);
75-
76-
-- 插入不同时间戳格式的值
77-
INSERT INTO test_formats
78-
VALUES
79-
(1, '2022-01-01 02:00:11'),
80-
(2, '2022-01-02T02:00:22'),
81-
(3, '2022-02-02T04:00:03+00:00'),
82-
(4, '2022-02-03');
62+
结果:
63+
```
64+
┌────────────┬─────────────────────┐
65+
│ meeting_id │ meeting_time │
66+
├────────────┼─────────────────────┤
67+
│ 1 │ 2024-01-15 06:00:00 │
68+
└────────────┴─────────────────────┘
8369
```
8470

8571
```sql
86-
SELECT *
87-
FROM test_formats;
88-
72+
-- 在纽约时区查看
73+
SET timezone = 'America/New_York';
74+
SELECT * FROM meetings;
8975
```
9076

91-
结果:
92-
77+
结果:
9378
```
94-
┌───────────────────────────────────────┐
95-
│ id │ a │
96-
├─────────────────┼─────────────────────┤
97-
│ 1 │ 2022-01-01 02:00:11 │
98-
│ 2 │ 2022-01-02 02:00:22 │
99-
│ 3 │ 2022-02-02 04:00:03 │
100-
│ 4 │ 2022-02-03 00:00:00 │
101-
└───────────────────────────────────────┘
79+
┌────────────┬─────────────────────┐
80+
│ meeting_id │ meeting_time │
81+
├────────────┼─────────────────────┤
82+
│ 1 │ 2024-01-15 01:00:00 │
83+
└────────────┴─────────────────────┘
10284
```
10385

104-
Databend 会根据您当前的时区自动调整并显示 TIMESTAMP 值。
86+
同一个时间戳会根据会话时区设置显示为不同的值。
87+
88+
## TIMESTAMP_TZ
89+
90+
TIMESTAMP_TZ 同时存储 UTC 时间和原始时区偏移。显示时始终包含偏移量,且不受会话时区影响。这对于审计日志、金融交易或需要保留确切时区上下文的场景非常有用。
10591

10692
```sql
107-
-- 创建表来测试带时区调整的时间戳值
108-
CREATE TABLE test_tz (
109-
id INT,
110-
t TIMESTAMP
93+
CREATE TABLE system_logs (
94+
log_id INT,
95+
log_time TIMESTAMP_TZ
11196
);
11297

113-
-- 设置时区为 UTC
114-
SET timezone = 'UTC';
98+
-- 插入来自不同地点的日志
99+
INSERT INTO system_logs VALUES
100+
(1, '2024-01-15 14:00:00+08:00'), -- 北京
101+
(2, '2024-01-15 06:00:00+00:00'), -- UTC
102+
(3, '2024-01-15 01:00:00-05:00'); -- 纽约
115103

116-
-- 插入考虑不同时区的时间戳值
117-
INSERT INTO test_tz
118-
VALUES
119-
(1, '2022-02-03T03:00:00'),
120-
(2, '2022-02-03T03:00:00+08:00'),
121-
(3, '2022-02-03T03:00:00-08:00'),
122-
(4, '2022-02-03'),
123-
(5, '2022-02-03T03:00:00+09:00'),
124-
(6, '2022-02-03T03:00:00+06:00');
104+
-- 使用任意会话时区查看
105+
SET timezone = 'UTC';
106+
SELECT * FROM system_logs;
125107
```
126108

109+
结果:
127110
```
128-
SELECT *
129-
FROM test_tz;
111+
┌────────┬───────────────────────────┐
112+
│ log_id │ log_time │
113+
├────────┼───────────────────────────┤
114+
│ 1 │ 2024-01-15 14:00:00+08:00 │
115+
│ 2 │ 2024-01-15 06:00:00+00:00 │
116+
│ 3 │ 2024-01-15 01:00:00-05:00 │
117+
└────────┴───────────────────────────┘
130118
```
131119

132-
结果:
120+
```sql
121+
-- 更改会话时区
122+
SET timezone = 'Asia/Shanghai';
123+
SELECT * FROM system_logs;
124+
```
133125

126+
结果:
134127
```
135-
┌───────────────────────────────────────┐
136-
│ id │ t │
137-
├─────────────────┼─────────────────────┤
138-
│ 1 │ 2022-02-03 03:00:00 │
139-
│ 2 │ 2022-02-02 19:00:00 │
140-
│ 3 │ 2022-02-03 11:00:00 │
141-
│ 4 │ 2022-02-03 00:00:00 │
142-
│ 5 │ 2022-02-02 18:00:00 │
143-
│ 6 │ 2022-02-02 21:00:00 │
144-
└───────────────────────────────────────┘
128+
┌────────┬───────────────────────────┐
129+
│ log_id │ log_time │
130+
├────────┼───────────────────────────┤
131+
│ 1 │ 2024-01-15 14:00:00+08:00 │
132+
│ 2 │ 2024-01-15 06:00:00+00:00 │
133+
│ 3 │ 2024-01-15 01:00:00-05:00 │
134+
└────────┴───────────────────────────┘
145135
```
146136

147-
```sql
148-
-- 将时区更改为 Asia/Shanghai
149-
SET timezone = 'Asia/Shanghai';
137+
时区偏移始终被保留并显示。
150138

151-
-- 使用新的时区设置从表中选择数据
152-
SELECT *
153-
FROM test_tz;
154-
```
139+
:::note
140+
TIMESTAMP_TZ 只存储数值偏移(如 `+08:00`),而不存储时区名称。该偏移量不会随夏令时变化而自动调整。
141+
:::
155142

156-
结果:
143+
## 选择合适的类型
157144

158-
```
159-
┌───────────────────────────────────────┐
160-
│ id │ t │
161-
├─────────────────┼─────────────────────┤
162-
│ 1 │ 2022-02-03 11:00:00 │
163-
│ 2 │ 2022-02-03 03:00:00 │
164-
│ 3 │ 2022-02-03 19:00:00 │
165-
│ 4 │ 2022-02-03 08:00:00 │
166-
│ 5 │ 2022-02-03 02:00:00 │
167-
│ 6 │ 2022-02-03 05:00:00 │
168-
└───────────────────────────────────────┘
169-
```
145+
- 使用 **DATE** 存储不包含时间信息的日历日期
146+
- 使用 **TIMESTAMP** 当您希望时间在每个用户的本地时区显示
147+
- 使用 **TIMESTAMP_TZ** 当您需要保留原始时区上下文
170148

171149
## 函数
172150

0 commit comments

Comments
 (0)