一尘不染

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

sql

我有一个要求,我要获取两个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


阅读 271

收藏
2021-03-08

共1个答案

一尘不染

首先,这是一个好消息:您的值是可保存的,就是将它们简单地比较 为字符串
将返回正确的结果(MAX(...)将根据需要工作)。这对转换无济于事,但至少它仍会吐出“更大”的值。

对于投射,您可以在这里做几件事。

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

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)

但是,更好的选择可能是让调用您的数据库的人传入以atimestamp而不是a形式输入的参数string-这意味着您根本不必执行任何转换方法。

2021-03-08