我有一个来自外部系统的UTC格式为2022-01-02T08:00:00.000+00:00的日期时间字段。应该在DB2中查询此值以确定记录是否存在。DB2中存储的日期格式为2022-01-01 08:00:00.000。是否有任何方法可以将传入日期转换为2022-01-01 08:00:00.000?最后的查询应该类似于
2022-01-02T08:00:00.000+00:00
2022-01-01 08:00:00.000
select * from table where changedate = '2022-01-02T08:00:00.000+00:00'
dl5txlt91#
Db2并不以字符串格式存储时间戳,而是使用一些二进制格式。因此,如果我没猜错的话,您的问题应该改为“如何将timestamp的YYYY-MM-DDTHH24.MI.SS.FF3XXXXXX字符串表示转换为timestamp数据类型”。不幸的是,在TO_DATE / TIMESTAMP_FORMAT函数中没有这样的内置模式,但您可以使用以下表达式。T列具有timestamp数据类型,并且您可以在select * from table where changedate = ...语句中使用此表达式。
YYYY-MM-DDTHH24.MI.SS.FF3XXXXXX
T
select * from table where changedate = ...
SELECT S , TO_DATE (TRANSLATE (SUBSTR (S, 1, 23), ' ', 'T'), 'YYYY-MM-DD HH24:MI:SS.FF3') + CAST (TRANSLATE (SUBSTR (S, 24), '', ':', '') || '00' AS DEC (6)) AS T FROM ( VALUES '2022-01-02T08:00:00.000+00:00' , '2022-01-02T08:00:00.000+03:30' , '2022-01-02T08:00:00.000-03:30' ) T (S)
| 标准|T形|| - -|- -|| 2022年01月02日星期二08:00:00.000+00:00| 2022-01-02-08.00.00.000000|| 2022年01月02日08:00:00.000+03:30| 2022-01-02-11.30.00.000000|| 2022年1月2日上午8时00分00秒至下午3时30分|2022-01-02-04.30.00.000000|
1条答案
按热度按时间dl5txlt91#
Db2并不以字符串格式存储时间戳,而是使用一些二进制格式。
因此,如果我没猜错的话,您的问题应该改为“如何将timestamp的
YYYY-MM-DDTHH24.MI.SS.FF3XXXXXX
字符串表示转换为timestamp数据类型”。不幸的是,在TO_DATE / TIMESTAMP_FORMAT函数中没有这样的内置模式,但您可以使用以下表达式。
T
列具有timestamp数据类型,并且您可以在select * from table where changedate = ...
语句中使用此表达式。| 标准|T形|
| - -|- -|
| 2022年01月02日星期二08:00:00.000+00:00| 2022-01-02-08.00.00.000000|
| 2022年01月02日08:00:00.000+03:30| 2022-01-02-11.30.00.000000|
| 2022年1月2日上午8时00分00秒至下午3时30分|2022-01-02-04.30.00.000000|