转换前验证日期,又名。 ISDATE() 等效项

Validate dates before conversion, aka. ISDATE() equivalent

DB2 版本为 9.7.0.7

我有一个平面文件,需要在插入产品之前进行全面验证 table。为了便于分析,我将其解析为 table,其中所有列均为 VARCHAR.

其中一项任务是验证日期。我需要能够找到具体的无效日期,报告范围(频率)和解决方案(原因)。

我在 Sybase 和 SQL 服务器中使用 ISDATE(),其中 return 有效日期为 1,无效日期为 0。在 Teradata 中,我离开加入到系统目录中的 SYS_CALENDAR table。自从我上次进入 DB2 环境以来已经有大约 15 年了,但我相信两者的类似物都不存在。 在这个 DB2 环境中,我的角色仅限于 QA,这意味着我不能创建 T-SQL 过程或 UDF。

这个话题很聪明,让我觉得可能有一些常见的 Table 表达式逻辑可以在查询中使用: ISDATE equivalent of DB2

然而,这个解决方案不尽如人意,因为它只考虑格式 - 无效(但格式正确)的日期如“2016-04-31”或“2016-02-30”的存在将引发一个错误,查询将 return 没有行。

我需要 return 所有行,确定每一行是有效还是无效(或者只是 return 无效行以供调查,甚至) - 所以做 CASTCONVERT,或在测试环境中插入格式化的 table 将不起作用。

是否有类似 ISDATE()SYS_CALENDAR 或其他解决方案来获得无法转换为 [=17] 的按行显示日期的相同最终产品=],在执行 conversion/insert?

之前

您可以使用 PureXML 扩展程序,如下所示:

SELECT
 XMLCAST(XMLQUERY('string($D) castable as xs:date' PASSING mycolumn as D ) AS INT)
FROM 
 mytable

这将 return 1 或 0。