
# 日期与时间数据类型
表1日期与时间数据类型 
| MySQL数据库           | GaussDB数据库 | 差异                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| DATE               | 支持，存在差异    | GaussDB支持date数据类型，与MySQL相比规格上存在如下差异： - 输入格式 - GaussDB只支持字符类型，不支持数值类型。如支持'2020-01-01'或'20200101'字符串格式，不支持20200101数值输入。MySQL支持数值输入转换为date类型。  - 分隔符：GaussDB不支持加号"+"、冒号":"作为年、月、日之间的分隔符，其他符号都支持。MySQL所有符号均可作为分隔符。 分隔符混合使用的某些场景也不支持，与MySQL也有差异，如'2020-01\>01'，'2020/01+01'等，不建议混合使用分隔符，建议使用最常用的"-"、"/"作为分隔符。  - 无分隔符：推荐使用完整格式，如 'YYYYMMDD' 或者 'YYMMDD'。其他不完整的格式（包括超长格式）解析的规则与MySQL存在差异，可能报错或者解析的结果与MySQL不一致，不推荐使用。    - 输出格式 GaussDB在sql_mode参数不包含'strict_trans_tables'选项（定义为宽松模式，否则为严格模式）时，允许年、月、日的值是0，但是输出时会按照年、月、日的顺序依次转换为合法的值，如date '0000-00-10' 转换为：0002-12-10 BC。 非法输入或者超过范围时，会报warning信息，并返回0000-00-00值。MySQL对于包含0值年、月、日的date值会原样输出。   - 取值范围 GaussDB的范围是4713-01-01 BC \~ 5874897-12-31 AD，支持公元前的日期，宽松模式下超过范围时，返回的是0值：0000-00-00，严格模式下会报错。MySQL的范围是 0000-00-00 \~ 9999-12-31，宽松模式下超过范围后，各个场景下的表现并不一致，可能报错（如SELECT查询语句中），也可能返回0000-00-00值（如INSERT时）。此差异会导致date类型作为函数入参时，函数返回的结果存在差异。   - 操作符 - GaussDB仅支持date类型之间的比较操作符"="、"!="、"\<"、"\<="、"\>"、"\>="，返回true或者false；date与interval类型的加法运算，返回结果为date类型；date与interval类型的减法运算，返回结果为date类型；date类型之间的减法运算，返回结果为interval类型。  - MySQL date类型和其他数值类型运算时，会先将date转换为数值类型，然后按照数值类型运算，结果也为数值类型。与GaussDB存在差异。如：   ``` -- MySQL： date + 数值，先将date类型转换为数值20200101,再与1相加，结果为数值类型20200102 mysql> SELECT date'2020-01-01' + 1; +----------------------+ | date'2020-01-01' + 1 | +----------------------+ |             20200102 | +----------------------+ 1 row in set (0.00 sec) -- GaussDB： date + 数值，数值类型会转换为interval类型 1 day，然后相加得到新的日期。 gaussdb=# SELECT date'2020-01-01' + 1; ?column? ------------ 2020-01-02 (1 row) ```   - 类型转换 相比较MySQL，GaussDB仅支持date类型与char(n)、nchar(n)、datetime、timestamp类型之间的相互转换，不支持与binary、decimal、json、integer、unsigned integer、time 类型之间的转换。集合等场景和复杂表达式场景下公共类型的确定原则与MySQL也不一致，参考[数据类型转换](https://support.huaweicloud.com/usermanual-ugo/zh-cn_topic_0000002523812420.html)章节的描述。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| DATETIME\[(fsp)\]  | 支持，存在差异    | GaussDB支持datetime数据类型，与MySQL相比规格上存在如下差异： - 输入格式 - GaussDB只支持字符类型，不支持数值类型。如支持'2020-01-01 10:20:30.123456'或'20200101102030.123456'字符串格式，不支持如20200101102030.123456的数值类型输入。MySQL支持数值输入转换为datetime类型。  - 分隔符：GaussDB不支持加号"+"、冒号":"作为年、月、日之间的分隔符，其他的符号都支持。仅支持冒号":"作为时、分、秒之间的分隔符，其他的符号都不支持。分隔符混合使用的某些场景也不支持，与MySQL也有差异，不推荐使用。MySQL支持所有符号作为分隔符。  - 无分隔符：GaussDB推荐使用完整格式'YYYYMMDDhhmiss.ffffff'。其他不完整的格式（包括超长格式）解析的规则可能与MySQL存在差异，可能报错或者解析的结果与MySQL不一致，不推荐使用。    - 输出格式： - 统一为'YYYY-MM-DD hh:mi:ss.ffffff'的格式，格式与MySQL无差异，且不受DateStyle参数的影响。但是对于精度部分，如果最后几位为0，GaussDB不显示，MySQL会显示。  - GaussDB在sql_mode参数不包含'strict_trans_tables'选项（定义为宽松模式，否则为严格模式）时，允许年、月、日值是0，但是输出时会按照年、月、日的顺序依次转换为合法的值，如datetime '0000-00-10 00:00:00' 转换为：0002-12-10 00:00:00 BC。 非法输入或者超过范围时，会报warning信息，并返回0000-00-00 00:00:00值。MySQL对于包含0值年、月、日的datetime值会原样输出。    - 取值范围 4713-11-24 00:00:00.000000 BC \~ 294277-01-09 04:00:54.775806 AD。294277-01-09 04:00:54.775807 AD 返回的是infinity。对于超过范围的值，严格模式下GaussDB会报错，MySQL是否报错取决于使用场景。一般查询场景不报错，而执行DML SQL语句更改表属性的值时报错。宽松模式下GaussDB返回0000-00-00 00:00:00值，MySQL根据使用场景可能报错，也可能返回0000-00-00 00:00:00值或者null值。这个差异会导致以datetime类型为入参的函数执行结果与MySQL也存在差异。   - 精度 范围0\~6，作为表列的类型时缺省为0，与MySQL一致。对于 datetime\[(p)\] 'str' 表达式场景，GaussDB将(p)作为精度解析，缺省为6，将'str'按照p指定的精度格式化成datetime类型。MySQL不支持datetime\[(p)\] 'str'表达式。   - 操作符 - GaussDB仅支持datetime类型之间的比较操作符"="、"!="、"\<"、"\<="、"\>"、"\>="，返回true或者false；datetime与interval类型的加法运算，返回结果为datetime类型；datetime与interval 类型的减法运算，返回结果为datetime类型；datetime类型之间的减法运算，返回结果为interval类型。  - MySQL datetime类型和其他数值类型运算时，会先将datetime转换为数值类型，然后按照数值类型运算，结果也为数值类型。与GaussDB存在差异。如：   ``` -- MySQL： datetime + 数值，先将datetime类型转换为数值20201010123456,再与1相加，结果为数值类型20201010123457 mysql> SELECT cast('2020-10-10 12:34:56.123456' AS datetime) + 1; +----------------------------------------------------+ | cast('2020-10-10 12:34:56.123456' as datetime) + 1 | +----------------------------------------------------+ |                                     20201010123457 | +----------------------------------------------------+ 1 row in set (0.00 sec) -- GaussDB： datetime + 数值，数值类型会转换为interval类型 1 day，然后相加得到新的datetime。 gaussdb=# SELECT cast('2020-10-10 12:34:56.123456' AS datetime) + 1; ?column? --------------------- 2020-10-11 12:34:56 (1 row) ``` 将datetime类型与数值的运算结果作为函数的入参，可能导致函数的结果与MySQL也存在差异。   - 类型转换 相比较MySQL，GaussDB仅支持datetime类型与char(n)、varchar(n)、timestamp类型之间的相互转换、datetime到date、time类型的转换（仅赋值和显式转换）。不支持与binary、decimal、json、integer、unsigned integer类型之间的转换。集合等场景和复杂表达式场景下公共类型的确定原则与MySQL也不一致，参考[数据类型转换](https://support.huaweicloud.com/usermanual-ugo/zh-cn_topic_0000002523812420.html)章节的描述。   - 时区 GaussDB支持datetime值中携带时区信息（时区偏移或者时区名），如'2020-01-01 12:34:56.123456 +01:00' 或者 '2020-01-01 2:34:56.123456 CST'。GaussDB会将其转换为当前服务器时区的时间。MySQL不支持（5.7版本不支持，8.0及之后的版本支持）。   - GaussDB的datetime数据类型的表字段实际上会被转换为timestamp(p) without time zone类型，查询表信息或者使用工具导出的表结构，其字段的数据类型显示的是timestamp(p) without time zone，而不是datetime。MySQL显示的是datetime(p)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| TIMESTAMP\[(fsp)\] | 支持，存在差异    | GaussDB支持timestamp数据类型，与MySQL相比规格上存在如下差异： - 输入格式： - 只支持字符类型，不支持数值类型。如支持'2020-01-01 10:20:30.123456'或'20200101102030.123456'字符串格式，不支持如20200101102030.123456的数值类型输入。MySQL支持数值输入转换为timestamp类型。  - 分隔符：不支持加号"+"、冒号":"作为年、月、日之间的分隔符，其他的符号都支持。仅支持冒号":"作为时、分、秒之间的分隔符，其他的符号都不支持。分隔符混合使用的某些场景也不支持，与MySQL也有差异，不推荐使用。MySQL支持所有符号作为分隔符。  - 无分隔符：推荐使用完整格式'YYYYMMDDhhmiss.ffffff'。其他不完整的格式（包括超长格式）解析的规则可能与MySQL存在差异，可能报错或者解析的结果与MySQL不一致，不推荐使用。    - 输出格式： - 统一为'YYYY-MM-DD hh:mi:ss.ffffff'的格式，格式与MySQL无差异，且不受DateStyle参数的影响。但是对于精度部分，如果最后几位为0，GaussDB不显示，MySQL会显示。  - GaussDB在sql_mode参数不包含'strict_trans_tables'选项（定义为宽松模式，否则为严格模式）时，允许年、月、日值是0，但是输出时会按照年、月、日的顺序依次转换为合法的值，如timestamp '0000-00-10 00:00:00' 转换为：0002-12-10 00:00:00 BC。 非法输入或者超过范围时，会报warning信息，并返回0000-00-00 00:00:00值。MySQL对于包含0值年、月、日的timestamp值会原样输出。    - 取值范围： 4713-11-24 00:00:00.000000 BC \~ 294277-01-09 04:00:54.775806 AD。294277-01-09 04:00:54.775807 AD 返回的是infinity。对于超过范围的值，严格模式下GaussDB会报错，MySQL是否报错取决于使用场景。一般查询场景不报错，而执行DML SQL语句更改表属性的值时报错。宽松模式下GaussDB返回0000-00-00 00:00:00值，MySQL根据使用场景可能报错，也可能返回0000-00-00 00:00:00值或者null值。这个差异会导致以timestamp类型为入参的函数执行结果与MySQL也存在差异。   - 精度： 范围0\~6，作为表列的类型时缺省为0，与MySQL一致。对于 timestamp\[(p)\] 'str' 表达式场景： - GaussDB将(p)作为精度解析，缺省为6，将'str'按照p指定的精度格式化成timestamp类型。  - MySQL将timestamp 'str'的含义与GaussDB一致，缺省精度也为6。但是将timestamp(p) 'str'解析为函数调用，p作为timestamp函数的入参，结果返回一个timestamp类型的值，'str'作为投影列的别名。     - 操作符： - GaussDB仅支持timestamp类型之间的比较操作符"="、"!="、"\<"、"\<="、"\>"、"\>="，返回true或者false；timestamp与interval类型的加法运算，返回结果为timestamp类型；timestamp与interval类型的减法运算，返回结果为timestamp类型；timestamp类型之间的减法运算，返回结果为interval类型。  - MySQL timestamp类型和其他数值类型运算时，会先将timestamp转换为数值类型，然后按照数值类型运算，结果也为数值类型。与GaussDB存在差异。如：   ``` -- MySQL： timestamp + 数值，先将timestamp类型转换为数值20201010123456.123456,再与1相加，结果为数值类型20201010123457.123456 mysql> SELECT timestamp '2020-10-10 12:34:56.123456' + 1; +--------------------------------------------+ | timestamp '2020-10-10 12:34:56.123456' + 1 | +--------------------------------------------+ |                      20201010123457.123456 | +--------------------------------------------+ 1 row in set (0.00 sec) -- GaussDB： timestamp + 数值，数值类型会转换为interval类型 1 day，然后相加得到新的timestamp。 gaussdb=# SELECT timestamp '2020-10-10 12:34:56.123456' + 1; ?column? ---------------------------- 2020-10-11 12:34:56.123456 (1 row) ``` 将timestamp类型与数值的运算结果作为函数的入参，可能导致函数的结果与MySQL也存在差异。   - 类型转换： 相比较MySQL，GaussDB仅支持timestamp类型与char(n)、varchar(n)、datetime类型之间的相互转换、timestamp到date、time类型的转换（仅赋值和显式转换）。不支持与binary、decimal、json、integer、unsigned integer类型之间的转换。集合等场景和复杂表达式场景下公共类型的确定原则与MySQL也不一致，参考[数据类型转换](https://support.huaweicloud.com/usermanual-ugo/zh-cn_topic_0000002523812420.html)章节的描述。   - 时区： GaussDB支持timestamp值中携带时区信息（时区偏移或者时区名），如'2020-01-01 12:34:56.123456 +01:00' 或者 '2020-01-01 2:34:56.123456 CST'。GaussDB会将其转换为当前服务器时区的时间。如果更改服务器时区，timestamp类型的值输出时会转换为更改后时区的时间戳。MySQL不支持（5.7版本不支持，8.0及之后的版本支持）。   - GaussDB的timestamp数据类型的表字段实际上会被转换为timestamp(p) with time zone类型，查询表信息或者使用工具导出的表结构，其字段的数据类型显示的是timestamp(p) with time zone，而不是timestamp。MySQL显示的是timestamp(p)。   |
| TIME\[(fsp)\]      | 支持，存在差异    | GaussDB支持time数据类型，与MySQL相比规格上存在如下差异： - 输入格式： - 只支持字符类型，不支持数值类型。如支持'1 10:20:30'或'102030'字符串格式，不支持102030数值输入。MySQL支持数值输入转换为time类型。  - 分隔符：GaussDB仅支持冒号":"作为时、分、秒之间的分隔符，其他的符号都不支持。MySQL支持所有的符号作为分隔符。  - 无分隔符：推荐使用完整格式，如 'hhmiss.ffffff'。其他不完整的格式（包括超长格式）解析的规则可能与MySQL存在差异，可能报错或者解析的结果与MySQL不一致，不推荐使用。  - 分、秒、精度输入负数时，GaussDB数据库可能会忽略第一个负数开始的部分，涉及的部分解析为0，如：'00:00:-10' 解析结果为 '00:00:00'。 也可能报错，如：'00:00:-10000' 会解析报错。取决于输入值的范围。而MySQL数据库统一报错。    - 输出格式： 统一为hh:mi:ss.ffffff的格式，格式与MySQL无差异。但是对于精度部分，如果最后几位为0，GaussDB不显示，MySQL会显示。   - 取值范围： -838:59:59.000000 \~ 838:59:59.000000，与MySQL一致。对于超过范围的值，GaussDB在宽松模式下执行SELECT、INSERT、UPDATE等DML操作时，返回的值都是就近的边界值：-838:59:59或838:59:59。MySQL是查询时报错，DML操作返回的值才是就近边界值，场景上存在差异。此差异会导致time类型作为函数入参时，函数返回的结果也存在差异。   - 精度： 范围0\~6，作为表列的类型时缺省为0，与MySQL一致。对于 time(p) 'str' 表达式场景，GaussDB将(p)作为精度解析，缺省为6，将'str'按照p指定的精度格式化成time类型。MySQL是解析为time函数，p是入参，'str'是投影列的别名。   - 操作符： - GaussDB仅支持time类型之间的比较操作符"="、"!="、"\<"、"\<="、"\>"、"\>="，返回true或者false；time与interval类型的加法运算，返回结果为time类型；time与interval类型的减法运算，返回结果为time类型；time类型之间的减法运算，返回结果为interval类型。  - MySQL time类型和其他数值类型运算时，会先将time转换为数值类型，然后按照数值类型运算，结果也为数值类型。与GaussDB存在差异。如：   ``` -- MySQL： time + 数值，先将time类型转换为数值123456,再与1相加，结果为数值类型123457 mysql> SELECT time '12:34:56' + 1; +---------------------+ | time '12:34:56' + 1 | +---------------------+ |              123457 | +---------------------+ 1 row in set (0.00 sec) -- GaussDB： time + 数值，数值类型会转换为interval类型 1 day，然后相加得到新的time，由于是加了24小时，得到的仍然是12:34:56。 gaussdb=# SELECT time '12:34:56' + 1; ?column? ---------- 12:34:56 (1 row) ``` 将time类型与数值的运算结果作为函数的入参，可能导致函数的结果与MySQL也存在差异。   - 类型转换： 相比较MySQL，GaussDB仅支持time类型与char(n)、nchar(n)类型之间的相互转换、datetime、timestamp到time类型的转换。不支持与binary、decimal、date、json、integer、unsigned integer类型之间的转换。集合等场景和复杂表达式场景下公共类型的确定原则与MySQL也不一致，参考[数据类型转换](https://support.huaweicloud.com/usermanual-ugo/zh-cn_topic_0000002523812420.html)章节的描述。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| YEAR\[(4)\]        | 支持，存在差异    | GaussDB支持year数据类型，与MySQL相比规格上存在如下差异： - 操作符： - GaussDB仅支持year类型之间的比较操作符：=、!=、\<、\<=、\>、\>=。返回true或者false。  - GaussDB仅支持year类型与int4类型之间的算术操作符：+、-。返回整型值，MySQL是返回无符号整型值。    - 类型转换： 相比较MySQL，GaussDB仅支持year类型与int4类型的转换，仅支持int4、varchar、numeric、date、time、timestamp、timestamptz类型到year类型的转换。集合等场景和复杂表达式场景下公共类型的确定原则与MySQL也不一致，参考[数据类型转换](https://support.huaweicloud.com/usermanual-ugo/zh-cn_topic_0000002523812420.html)章节的描述。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| INTERVAL           | 支持，存在差异    | GaussDB支持INTERVAL数据类型，但INTERVAL在MySQL中为表达式，同时存在以下差异： - 不支持字符串类型的日期输入作为运算，如：SELECT '2023-01-01' + interval 1 day。  - 不支持interval expr unit语法中，expr为负整数或浮点数的输入，如：SELECT date'2023-01-01' + interval -1 day。  - 不支持interval expr unit语法中，expr为运算表达式的输入，如：SELECT date'2023-01-01' + interval 4/2 day。  - interval表达式参与运算时，返回值固定为datetime类型，MySQL为datetime或date类型。运算的逻辑与原有GaussDB保持一致，与MySQL有差异。  - interval expr unit语法中，expr数值支持的范围会根据unit单位的不同有所差异，最大可支持的范围为\[-2147483648, 2147483647\]。超过范围时，严格模式报error，宽松模式报warning并返回0值。  - interval expr unit语法中，expr指定的字段数量大于unit预期的字段数量时，在严格模式，报error；在宽松模式，报warning并返回0值。如unit取值为DAY_HOUR，预期的字段数量为2，expr取值为'1-2-3'，字段数量为3。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   
