在DB2中,将字符串转换为时间戳的时间为秒的许多分数

在DB2中,将字符串转换为时间戳的时间为秒的许多分数,db2,Db2,我试图将DB2中的字符串转换为以下格式的时间戳:2015-09-07T09:15:25.4788396+04:00 问题是,DB2似乎只处理6位小数秒,而不像我的例子中那样处理7位小数秒。有什么好的解决方法吗?您需要从字符串中解析时区。一旦你有了它,你就可以从“当前时区”中减去UTC时间,然后将解析的时区添加到其中,如下所示。您还需要使用REPLACE将T更改为破折号,将冒号更改为点 SELECT (TIMESTAMP('2015-09-07-09.15.25.4788396') - (curr

我试图将DB2中的字符串转换为以下格式的时间戳:2015-09-07T09:15:25.4788396+04:00


问题是,DB2似乎只处理6位小数秒,而不像我的例子中那样处理7位小数秒。有什么好的解决方法吗?

您需要从字符串中解析时区。一旦你有了它,你就可以从“当前时区”中减去UTC时间,然后将解析的时区添加到其中,如下所示。您还需要使用REPLACE将T更改为破折号,将冒号更改为点

SELECT (TIMESTAMP('2015-09-07-09.15.25.4788396') - (current timezone)) + 4 hours FROM sysibm.sysdummy1;

那里的格式与XML中的
xs:dateTime
模式相匹配。您可以利用这一点并使用隐含的XML解析:

SELECT XMLCAST(XMLCAST('2015-09-07T09:15:25.4788396+04:00' AS XML) AS TIMESTAMP)
FROM SYSIBM.SYSDUMMY1

            1
--------------------------
2015-09-07-05:15:25.478839

注意:返回的时间戳以UTC为单位,添加
+当前时区
以将其作为本地时间戳返回。在DB2z/OSDSN10015上测试。

您不能直接截断吗?嗯。。。我希望不要丢失字符串末尾的时区信息。您用什么语言编程?或者您想在db2本身中这样做,我不推荐这样做。我在db2中这样做是的(在解析数据库中准备就绪的XML时)。什么db2版本和平台?他如何获得子字符串?他怎么知道时区偏移量是4h?
1)
没有DB2z/OS9.7。有9.1和10。您的答案在我测试的z/OS10实例上有效,但在LUW9.7上无效<代码>2)在我尝试的z/OS实例上,您的答案截断了小数秒的最后一个数字。您可以通过执行
TIMESTAMP(7)
而不是
TIMESTAMP
来解决此问题。