我有一个要求,我需要获取两个 ISO 8601 时间戳格式的字符串,并且必须比较它们并获取它们的最大时间戳。字符串采用以下格式。
2014-06-11T16:45:45Z
为了进行比较,我需要将它们转换为 DB2 时间戳,然后进行比较。问题出在“T”和“Z”字母上。因此,我无法施展。我知道我可以简单地REPLACE
T和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(使用前将#替换为@)