更新时间:2025-09-11 GMT+08:00
分享

日期时间类型

M-Compatibility支持的日期时间类型如表1所示。

表1 日期时间类型

名称

描述

存储空间

DATE

用于保存年月日信息,即日期信息。

  • 输入格式:支持有分隔符的字符串'YYYY-MM-DD'和无分隔符的字符串'YYYYMMDD'以及数字YYYYMMDD的输入格式,其中年份可以只输入2位,此时70~99默认为1970~1999,00~69默认为2000~2069。
    • 有分隔符场景下,任意标点符号可作为分隔符。
  • 输出格式:仅支持YYYY-MM-DD。
  • 范围:1000-01-01 ~ 9999-12-31。
    • sql_mode参数值包含“allow_invalid_dates”时,月1-12与日1-31可以自由组合,即2月31日也可以存入。
    • sql_mode参数值不包含“no_zero_in_date”时,允许月和日为0,即1999-00-00为合法值。
    • sql_mode参数值不包含“no_zero_date”时,允许年月日均为0,即0000-00-00为合法值。

4个字节

TIME[(p)]

用于保存时分秒和毫秒信息,即时间信息。

  • 输入格式:支持有分隔符的字符串'hh:mm:ss'和无分隔符的字符串'hhmmss'以及数字hhmmss的输入格式,支持输入日即天数信息的字符串'D hh:mm:ss',支持毫秒输入,最终会四舍五入截断至指定精度。
    • 有分隔符场景下,仅单个英文冒号可作为分隔符。
  • 输出格式:支持hh:mm:ss或hhh:mm:ss。
  • 范围:-838:59:59.000000 ~ 838:59:59.000000。
  • 精度:p表示小数点后的精度,取值范围为0~6。当p设置超过6时,按照p为6进行处理。

8个字节

DATETIME[(p)]

用于保存年月日信息,即日期信息。

  • 输入格式:支持有分隔符的字符串'YYYY-MM-DD'和无分隔符的字符串'YYYYMMDD'以及数字YYYYMMDD的输入格式,其中年份可以只输入2位,此时70~99默认为1970~1999,00~69默认为2000~2069,支持毫秒输入,最终会四舍五入截断至指定精度。
    • 有分隔符场景下,在日期部分或时间部分中任意标点符号可作为分隔符,毫秒前的分隔符只能是小数点。
    • 年月日与时分秒之间允许若干空格或单个大写字母T作为间隔,其中空格仅应用于有分隔符的字符串。
  • 输出格式:仅支持YYYY-MM-DD hh:mm:ss。
  • 范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。
    • sql_mode参数值包含“allow_invalid_dates”时,月1-12与日1-31可以自由组合,即2月31日也可以存入。
    • sql_mode参数值不包含“no_zero_in_date”时,允许月和日为0,即1999-00-00 10:00:00为合法值。
    • sql_mode参数值不包含“no_zero_date”时,允许年月日均为0,即0000-00-00 10:00:00为合法值。
  • 精度:p表示小数点后的精度,取值范围为0~6。当p设置超过6时,按照p为6进行处理。

8个字节

TIMESTAMP[(p)]

用于保存同时包含日期信息和时间信息的数据,受到数据库时区的影响。

  • 输入格式:支持有分隔符的字符串'YYYY-MM-DD hh:mm:ss'和无分隔符的字符串'YYYYMMDDhhmmss'以及数字YYYYMMDDhhmmss的输入格式,其中年份可以只输入2位时,此时70~99默认为1970~1999,00~69默认为2000~2069,支持毫秒输入,最终会四舍五入截断至指定精度。
    • 有分隔符场景下,在日期部分或时间部分中任意标点符号可作为分隔符,毫秒前的分隔符只能是小数点。
    • 年月日与时分秒之间允许若干空格或单个大写字母T作为间隔,其中空格仅应用于有分隔符的字符串。
  • 输出格式:仅支持YYYY-MM-DD hh:mm:ss。
  • 范围:1970-01-01 00:00:01' UTC ~ 2038-01-19 03:14:07' UTC。
  • 精度:p表示小数点后的精度,取值范围为0~6。当p设置超过6时,按照p为6进行处理。

8个字节

YEAR

用于保存年份信息。

  • 输入格式:支持4位的YYYY和至多两位的YY,此时70~99默认为1970~1999,00~69默认为2000~2069。
  • 输出格式:仅支持YYYY。
  • 范围:1901 ~ 2155。

4个字节

  • M-Compatibility不支持ODBC语法的字面量:

    { d 'str' }

    { t 'str' }

    { ts 'str' }

  • M-Compatibility支持标准SQL字面量:

    DATE'str'

    TIME 'str'

    TIMESTAMP'str'

  • 时间类型的数据在显示的时候会自动忽略末尾的所有零。
  • 有分隔符的字符串输入中反斜杠“\”在M-Compatibility中视作普通标点符号而非转义字符标志。
  • 精度p默认取值为0。
  • sql_mode参数值包含“strict_trans_tables”时,非法输入或者超过范围会报错,不包含时非法输入或者超过范围存入0值。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
--创建表
m_db=# CREATE TABLE temporal_date(a DATE);
m_db=# CREATE TABLE temporal_time(b TIME);
m_db=# CREATE TABLE temporal_datetime(c DATETIME(5));
m_db=# CREATE TABLE temporal_timestamp(d TIMESTAMP);
m_db=# CREATE TABLE temporal_year(e YEAR);
--插入数据
m_db=# INSERT INTO temporal_date VALUES ('2020-02-02'); 
m_db=# INSERT INTO temporal_date VALUES (date'2020-02-02');
m_db=# INSERT INTO temporal_date VALUES (20200202);
m_db=# INSERT INTO temporal_time VALUES ('20 10:00:00');
m_db=# INSERT INTO temporal_time VALUES ('800:00:00');
m_db=# INSERT INTO temporal_time VALUES (time'200:00:00');
m_db=# INSERT INTO temporal_datetime VALUES ('2020-02-02T04:04:04');
m_db=# INSERT INTO temporal_datetime VALUES (timestamp'2020-02-02 10:00:00');
m_db=# INSERT INTO temporal_datetime VALUES (20201010010101);
m_db=# INSERT INTO temporal_timestamp VALUES ('2020-02-02 10:00:00');
m_db=# INSERT INTO temporal_timestamp VALUES (20200220101010);
m_db=# INSERT INTO temporal_year VALUES (2020);
m_db=# INSERT INTO temporal_year VALUES (20);
--查看数据
m_db=# SELECT * FROM temporal_date;
     a      
------------
 2020-02-02
 2020-02-02
 2020-02-02
(3 rows)

m_db=# SELECT * FROM temporal_time;
     b     
-----------
 490:00:00
 800:00:00
 200:00:00
(3 rows)

m_db=# SELECT * FROM temporal_datetime;
             c             
---------------------------
 2020-02-02 04:04:04.00000
 2020-02-02 10:00:00.00000
 2020-10-10 01:01:01.00000
(3 rows)

m_db=# SELECT * FROM temporal_timestamp;
          d          
---------------------
 2020-02-02 10:00:00
 2020-02-20 10:10:10
(2 rows)

m_db=# SELECT * FROM temporal_year;
  e   
------
 2020
 2020
(2 rows)

--删除表
m_db=# DROP TABLE temporal_date;
m_db=# DROP TABLE temporal_time;
m_db=# DROP TABLE temporal_datetime;
m_db=# DROP TABLE temporal_timestamp;
m_db=# DROP TABLE temporal_year;

相关文档