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

标签 sql db2

我有一个要求,我得到两个 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/

相关文章:

mysql - 在存储过程中遍历表的所有行时出现语法错误

sql - 在转换之前验证日期,也就是。 ISDATE() 等效

Java/DB2 首先获取 :n ROWS with custom parameter

php - 从 MySQL 数据库获取行和数据的最快方法?

sql - MS SQL Server 的 "between"是否包含范围边界?

java - IN 子句中的 Hibernate 标准 DB2 复合键

sql-server - DB2 中的@@error 有什么相同之处?

java - 如何验证时间戳?

mysql - SQL 将连接结果连接到列中

c# - 将连接字符串存储在数据库中并在应用程序启动时检索它