DB2版本是9.7.0.7
我有一个平面文件,需要在插入生产表之前进行充分验证。为了进行分析,我将其解析为一个表,其中所有列都是VARCHAR
.
任务之一是验证日期。我需要能够找到具体的无效日期,报告范围(频率)和解决方案(原因)。
I use ISDATE()
在 Sybase 和 SQL Server 中,返回 1 表示有效日期,返回 0 表示无效日期。在 Teradata 中,我将 join 保留为SYS_CALENDAR
系统目录中的表。自从我上次使用 DB2 环境以来,已经过去了大约 15 年,但我相信这两种环境中的类似情况都不存在。
在此 DB2 环境中,我的角色仅限于 QA,这意味着我无法创建 T-SQL 过程或 UDF。
这个线程很聪明,让我觉得可能有一些公共表表达式逻辑可以在查询中使用:ISDATE 相当于 DB2
然而,这个解决方案不够完善,因为它只考虑格式 - 存在无效(但格式正确)日期(例如“2016-04-31”或“2016-02-30”)将引发错误并且查询将不返回任何行。
我需要返回所有行,确定每行是有效还是无效(或者只是返回无效行进行调查) - 所以做CAST
or 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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)