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'将引发错误,查询将不返回任何行。
我需要返回所有行,确定每个行是有效还是无效(或者只是返回无效行进行调查,甚至) - 这样做CAST
或CONVERT
,或插入格式化测试环境中的表格无法正常工作。
是否存在与ISDATE()
,SYS_CALENDAR
或其他解决方案类似的解决方案,这些解决方案可以获得无法按行显示日期的相同最终结果{{1}在执行转换/插入之前?
答案 0 :(得分:1)
您可以使用PureXML
扩展程序执行此操作,如下所示:
SELECT
XMLCAST(XMLQUERY('string($D) castable as xs:date' PASSING mycolumn as D ) AS INT)
FROM
mytable
将返回1或0。