sql – 在转换之前验证日期,又名. ISDATE()等价

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或其他解决方案,这些解决方案在执行转换/插入之前获得了无法转换为DATE的日期的行式表示的相同最终产品?

最佳答案 您可以使用PureXML扩展执行以下操作:

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

这将返回1或0.

点赞