DB2 将 ISO 8601 时间戳字符串转换为 DB2 时间戳

2024-04-16

我有一个要求,我需要获取两个 ISO 8601 时间戳格式的字符串,并且必须比较它们并获取它们的最大时间戳。字符串采用以下格式。

2014-06-11T16:45:45Z

为了进行比较,我需要将它们转换为 DB2 时间戳,然后进行比较。问题出在“T”和“Z”字母上。因此,我无法施展。我知道我可以简单地REPLACET和Z以及cast,但我想知道是否有更好的方法。

我尝试了以下功能,但未能获得所需的结果。

to_date, to_timestamp, varchar_format, cast as

使用 DB2 LUW v9.7


首先,好消息:您的价值观是 SARGable,即简单地比较它们作为字符串将返回正确的结果(MAX(...)将根据需要工作)。这对选角没有帮助,但至少它仍然会吐出“更大”的价值。

对于选角,您可以在此处执行几项操作。

首先,只要您的日期/时间部分保持该格式,就可能更容易单独获取它们并重新组合时间戳:

TIMESTAMP(SUBSTR(@inputParm, 1, 10), SUBSTR(@inputParm, 12, 8)) AS resultTimestamp

LUW还有一个函数叫做TIMESTAMP_FORMAT http://www.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.sql.ref.doc/doc/r0007107.html (TO_TIMESTAMP从技术上讲是这个的同义词)。我假设系统实际上因传入数据中没有小数秒这一事实而窒息。我建议尝试这样的事情:

TIMESTAMP_FORMAT('YYYY-MM-DD HH24:MI:SS ', @inputParm)

然而,更好的选择可能是让调用您数据库的人传入一个键入为timestamp而不是作为string- 这意味着您根本不需要执行任何转换解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DB2 将 ISO 8601 时间戳字符串转换为 DB2 时间戳 的相关文章

随机推荐