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

时间:2016-05-05 16:31:15

标签: sql validation datetime db2 db2-luw

DB2版本是9.7.0.7

我有一个平面文件,需要在插入生产表之前完全验证。为了进行分析,我已将其解析为一个表格,其中所有列均为VARCHAR

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

我在Sybase和SQL Server中使用ISDATE(),它对于有效日期返回1,对于无效日期返回0。在Teradata中,我离开了加入系统目录中的SYS_CALENDAR表。自从我最后一次进入DB2环境以来已经过了大约15年,但我相信模拟器要么不存在。 在这个DB2环境中,我的角色仅限于QA,这意味着我无法创建T-SQL过程或UDF。

这个线程很聪明,让我觉得可能会有一些可用于查询的公用表表达式逻辑: ISDATE equivalent of DB2

然而,由于它只考虑格式 - 存在无效(但格式正确)的日期,例如' 2016-04-31'或者' 2016-02-30'将引发错误,查询将不返回任何行。

我需要返回所有行,确定每个行是有效还是无效(或者只是返回无效行进行调查,甚至) - 这样做CASTCONVERT,或插入格式化测试环境中的表格无法正常工作。

是否存在与ISDATE()SYS_CALENDAR或其他解决方案类似的解决方案,这些解决方案可以获得无法按行显示日期的相同最终结果{{1}在执行转换/插入之前?

1 个答案:

答案 0 :(得分:1)

您可以使用PureXML扩展程序执行此操作,如下所示:

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

将返回1或0。