我有一个要求,我要获取两个ISO 8601时间戳格式的字符串,并且必须对其进行比较并获取它们的最大时间戳。字符串采用以下格式。
2014-06-11T16:45:45Z
为了进行比较,我需要将它们转换为DB2时间戳,然后进行比较。问题出在“ T”和“ Z”字母上。因此,我无法施展。我知道我可以简单地 REPLACE将T和Z进行转换,但是我想知道是否有更好的方法。
REPLACE
我尝试了以下功能,但无法获得所需的结果。
to_date, to_timestamp, varchar_format, cast as
使用DB2 LUW v9.7
首先,这是一个好消息:您的值是可保存的,就是将它们简单地比较 为字符串 将返回正确的结果(MAX(...)将根据需要工作)。这对转换无济于事,但至少它仍会吐出“更大”的值。
MAX(...)
对于投射,您可以在这里做几件事。
首先,只要您的日期/时间部分保持该格式,单独获取它们并重新组合时间戳可能会更容易:
TIMESTAMP(SUBSTR(@inputParm, 1, 10), SUBSTR(@inputParm, 12, 8)) AS resultTimestamp
LUW还具有一个称为TIMESTAMP_FORMAT的函数(TO_TIMESTAMP从技术上讲,这是同义词)。我假设系统实际上在阻塞您输入数据中没有小数秒的事实。我建议尝试这样的事情:
TO_TIMESTAMP
TIMESTAMP_FORMAT('YYYY-MM-DD HH24:MI:SS ', @inputParm)
但是,更好的选择可能是让调用您的数据库的人传入以atimestamp而不是a形式输入的参数string-这意味着您根本不必执行任何转换方法。
timestamp
string