
# 日期时间类型
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个字节 |
   
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 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值。
 
#### 示例:
```
--创建表
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;
```
