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