更新时间:2024-05-14 GMT+08:00
分享

日期和时间函数

以下为GaussDB M-Compatibility兼容性日期时间函数公共说明。

  • 《M-Compatibility开发指南》中“函数和操作符”章节函数入参为时间类型表达式的情况:

    时间类型表达式主要包括TEXT、DATETIME、DATE或TIME,但所有可以隐式转换为时间表达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表达式生效。

    生效的情况根据函数有所不同,比如:DATEDIFF函数由于只计算日期的差值,所以时间表达式会当做日期来解析。TIMESTAMPDIFF函数由于计算时间差值时是根据UNIT来决定的,所以会根据UNIT选择将时间表达式当做DATE或者TIME或者DATETIME来解析。

  • 函数入参为无效日期的情况:

    一般而言,日期时间函数支持DATE、DATETIME的范围和MySQL保持一致。DATE支持的范围为'0000-01-01'到'9999-12-31',DATETIME支持的范围为'0000-01-01 00:00:00'到'9999-12-31 23:59:59'。虽然GaussDB支持的DATE、DATETIME范围大于MySQL,但是越界仍然算无效日期。

大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。

新框架下GaussDB的大部分日期时间函数与MySQL一致,一些函数的差异如下表所示:

表1 日期与和时间函数列表

序号

MySQL数据库

GaussDB数据库

差异

1

ADDDATE()

支持

-

2

ADDTIME()

支持

-

3

CONVERT_TZ()

支持

-

4

CURDATE()

支持

-

5

CURRENT_DATE()/CURRENT_DATE

支持

-

6

CURRENT_TIME()/CURRENT_TIME

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIME(257) == SELECT CURRENT_TIME(1))。

GaussDB只支持[0,6]合法值,其他值报错。

7

CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIMESTAMP(257) == SELECT CURRENT_TIMESTAMP(1))。

GaussDB只支持[0,6]合法值,其他值报错。

8

CURTIME()

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURTIME(257) == SELECT CURTIME(1))。

GaussDB只支持[0,6]合法值,其他值报错。

9

DATE()

支持

-

10

DATE_ADD()

支持

-

11

DATE_FORMAT()

支持

-

12

DATE_SUB()

支持

-

13

DATEDIFF()

支持

-

14

DAY()

支持

-

15

DAYNAME()

支持

-

16

DAYOFMONTH()

支持

-

17

DAYOFWEEK()

支持

-

18

DAYOFYEAR()

支持

-

19

EXTRACT()

支持

-

20

FROM_DAYS()

支持

-

21

FROM_UNIXTIME()

支持

-

22

GET_FORMAT()

支持

-

23

HOUR()

支持

-

24

LAST_DAY()

支持

-

25

LOCALTIME()/LOCALTIME

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIME(257) == SELECT LOCALTIME(1))。

GaussDB只支持[0,6]合法值,其他值报错。

26

LOCALTIMESTAMP/LOCALTIMESTAMP()

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIMESTAMP(257) == SELECT LOCALTIMESTAMP(1))。

GaussDB只支持[0,6]合法值,其他值报错。

27

MAKEDATE()

支持

-

28

MAKETIME()

支持

-

29

MICROSECOND()

支持

-

30

MINUTE()

支持

-

31

MONTH()

支持

-

32

MONTHNAME()

支持

-

33

NOW()

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT NOW(257)==SELECT NOW(1))。

GaussDB只支持[0,6]合法值,其他值报错。

34

PERIOD_ADD()

支持,有差异

  1. 整数溢出处理的行为。

    MySQL在5.7版本,此函数入参结果最大值为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。

  2. 负数period的表现。

    MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。

  3. period月份越界的表现。

    MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。

35

PERIOD_DIFF()

支持,有差异

  1. 整数溢出处理的行为。

    MySQL在5.7版本,此函数入参结果最大值为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。

  2. 负数period的表现。

    MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。

  3. period月份越界的表现。

    MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。

36

QUARTER()

支持

-

37

SEC_TO_TIME()

支持

-

38

SECOND()

支持

-

39

STR_TO_DATE()

支持

返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是datetime、date。

40

SUBDATE()

支持

-

41

SUBTIME()

支持

-

42

SYSDATE()

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕。

GaussDB不回绕。

43

TIME()

支持

-

44

TIME_FORMAT()

支持

-

45

TIME_TO_SEC()

支持

-

46

TIMEDIFF()

支持

-

47

TIMESTAMP()

支持

-

48

TIMESTAMPADD()

支持

-

49

TIMESTAMPDIFF()

支持

-

50

TO_DAYS()

支持

-

51

TO_SECONDS()

支持

-

52

UNIX_TIMESTAMP()

支持

-

53

UTC_DATE()

支持

-

54

UTC_TIME()

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。

55

UTC_TIMESTAMP()

支持,有差异

MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。

56

WEEK()

支持

-

57

WEEKDAY()

支持

-

58

WEEKOFYEAR()

支持

-

59

YEAR()

支持

-

60

YEARWEEK()

支持

-

分享:

    相关文档

    相关产品