Oracle兼容-函数-TO_TIMESTAMP()函数


1. 语法

  1. TO_TIMESTAMP(string , fmt)

2. 定义和用法

函数 TO_TIMESTAMP() 的作用是将字符串类型数据 string 转换为日期(时间)格式类型,fmt用于指定string的日期模型。

参数 fmt 支持的日期模型如下表所示:

格式描述示例或说明
YYYY/RRRR4-digit year2021
YYY3-digit year021
YY2-digit year21
RR2-digit year与YY类似,但会因指定的年号与当前年份的后两位数字返回不同的值:
- 当前年份后两位为[00,49]:
  ‘RR’对应年号在[00,49], 返回年号前两位数值与当前年份相同
  ‘RR’对应年号在[50,99], 返回年号前两位数值比当前年份小1
- 当前年份后两位为[50,99]:
  ‘RR’对应年号在[00,49], 返回年号前两位数值比当前年份大1
  ‘RR’对应年号在[50,99], 返回年号前两位数值与当前年份相同
Y1-digit year1
DDDay of month (1-31)
HH, HH12Hour of day (1-12).
HH24Hour of day (0-23).
MIMinute that ranges from 0 to 59
MMMonth that ranges from 01 through 12, where January is 01.
MONAbbreviated name of the month.JAN,FEB
MONTHName of the month.JANUARY
SSSecond (0-59).
AMMeridian indicator with or without periods.格式与PM等价,最后的date值取决于第一个参数字串中对应位置值
PMMeridian indicator with or without periods.格式与AM等价,最后的date值取决于第一个参数字串中对应位置值
FF[1-6]Fractional seconds
DDay of week (1-7). This element depends on the NLS territory of the session.
DDDDay of year (1-366).
- / , . ; :Punctuation is reproduced in the result.Any non-alphanumeric character is allowed to match the punctuation characters in the format model.
SSSSSSeconds past midnight (0-86399).
JJulian day; the number of days since January 1, 4712 BC. Number specified with J must be integers.GreatSQL 只支持 0001-01-01 ~ 9999-12-31 之间的 Julian day,即范围为:[1721424, 5373484]
XLocal radix character.‘HH:MI:SSXFF’
Y,YYYYear with comma in this position.2,023
RMRoman numeral month (I-XII; January = I).
THOrdinal NumberDDTH
FMFill mode.
FXFormat exact.

函数返回结果说明:

  • 参数 fmt 中指定日期格式,string 被成功解析后,将返回一个带日期的timestamp值(日期+时间,如:2023-01-01 00:00:00.00000)
  • 当无法根据 fmtstring 中获取合法日期时间值时,将返回NULL。
  • 返回的 timestamp 值,微秒部分长度为6位,微秒部分的值根据FF指示器来确定,具体示例如下:
TO_TIMESTAMP() 输入说明输出结果
TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS’)未指定FF格式,微秒部分全部置零NULL
TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS.ff’)指定FF但未指定位数,默认保留全部6位微秒2023-05-01 11:00:00.123456
TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS.ff6’)指定FF并指定位数为6,正确解析2023-05-01 11:00:00.123456
TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS.ff2’)指定FF并指定位数为2,但微秒部分有6位,解析失败NULL
TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS.ff0’)

TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS.ff7’)
指定FF但位数指示器超出合法范围(1~6),提示错误ERROR 1525 (HY000): Incorrect string value: ‘please check the format string’

3. Oracle兼容说明

  • 对指定格式包含HH或HH12时,GreatSQL与Oracle在显示12点时,返回值不同。如下例所示:
TO_TIMESTAMP()输入Oracle返回GreatSQL返回
TO_TIMESTAMP(‘12’,’HH12’)2023-09-01 12:00:00.0000000002023-05-01 00:00:00.000000
TO_TIMESTAMP(‘12’,’HH’)2023-09-01 12:00:00.0000000002023-05-01 00:00:00.000000
  • 微秒部分不同:Oracle返回值微秒部分为9位,GreatSQL为6位。
TO_TIMESTAMP()输入Oracle返回GreatSQL返回
TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS.ff’)11.00.00.1234560002023-05-01 11:00:00.123456
TO_TIMESTAMP(‘11:00:00.123456’, ‘HH:Mi:SS.ff6’)11.00.00.1234562023-05-01 11:00:00.123456
TO_TIMESTAMP(‘11:00:00.123456789’, ‘HH:Mi:SS.ff9’)11.00.00.123456789ERROR 1525 (HY000): Incorrect string value: ‘please check the format string’
  • 格式支持不同:Oracle的YY格式可以读取2位/3位/4位年份数字,GreatSQL只能读取2位年份数字。二者差异示例如下:
TO_TIMESTAMP()输入Oracle返回GreatSQL返回
TO_TIMESTAMP(‘20121018’, ‘YYMMDD’)2012-10-18NULL
TO_TIMESTAMP(‘2012-10-18’,’YY-MM-DD’)2012-10-18NULL
TO_TIMESTAMP(‘20121018’, ‘RRMMDD’)2012-10-18NULL
TO_TIMESTAMP(‘012-10-18’,’RR-MM-DD’)2012-10-18NULL
TO_TIMESTAMP(‘12-10-18’,’YY-MM-DD’)2012-10-182012-10-18 00:00:00.000000

4. 示例

  1. greatsql> SELECT TO_TIMESTAMP('2003-01-02 10:11:12 PM', 'YYYY-MM-DD HH12:MI:SS PM') FROM DUAL;
  2. +--------------------------------------------------------------------+
  3. | TO_TIMESTAMP('2003-01-02 10:11:12 PM', 'YYYY-MM-DD HH12:MI:SS PM') |
  4. +--------------------------------------------------------------------+
  5. | 2003-01-02 22:11:12.000000 |
  6. +--------------------------------------------------------------------+
  7. greatsql> SELECT TO_TIMESTAMP('03-01-02 8:11:2.123456', 'YY-MM-DD HH24:MI:SS.FF') FROM DUAL;
  8. +-------------------------------------------------------------------+
  9. | TO_TIMESTAMP('03-01-02 8:11:2.123456', 'YY-MM-DD HH24:MI:SS.FF') |
  10. +-------------------------------------------------------------------+
  11. | 2003-01-02 08:11:02.123000 |
  12. +-------------------------------------------------------------------+

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx