Sql 转换前验证日期,又名。ISDATE()等价物

Sql 转换前验证日期,又名。ISDATE()等价物,sql,validation,datetime,db2,db2-luw,Sql,Validation,Datetime,Db2,Db2 Luw,DB2版本是9.7.0.7 我有一个平面文件,需要在插入到生产表之前进行完全验证。为了进行分析,我将其解析为一个表,其中所有列都是VARCHAR 其中一项任务是验证日期。我需要能够找到具体的无效日期,报告范围(频率)和解决方案(原因) 我在Sybase和SQL Server中使用ISDATE(),它返回1表示有效日期,0表示无效日期。在Teradata中,我将join留在系统目录中的SYS\u CALENDAR表中。自从我上一次进入DB2环境已经有15年了,但我相信与之类似的情况并不存在。 在这

DB2版本是9.7.0.7

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

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

我在Sybase和SQL Server中使用
ISDATE()
,它返回1表示有效日期,0表示无效日期。在Teradata中,我将join留在系统目录中的
SYS\u CALENDAR
表中。自从我上一次进入DB2环境已经有15年了,但我相信与之类似的情况并不存在。 在这个DB2环境中,我的角色仅限于QA,这意味着我不能创建T-SQL过程或UDF

这个线程很聪明,让我觉得在查询中可能会用到一些常见的表表达式逻辑:

但是,作为一种解决方案,这一点是不够的,因为它只考虑格式—存在无效(但格式正确)的日期,如“2016-04-31”或“2016-02-30”,将引发错误,并且查询将不返回任何行

我需要返回所有行,确定每个行是有效的还是无效的(或者只是返回无效的行以进行调查),因此在测试环境中执行
CAST
CONVERT
,或插入格式化表都不起作用


是否有类似于
ISDATE()
SYS\u CALENDAR
,或另一种解决方案,在执行转换/插入之前,可以使用
PureXML
扩展实现无法转换为
DATE
的日期行表示的相同最终产品

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

它将返回1或0。

如果您可以确定在存储过程中执行此操作的方法,那么问题将是一个“工作工具”问题,您可以与支付您费用的人一起解决。您可以运行复合SQL语句(有时称为匿名块),而无需创建例程。所以,是的,有一个解决方案。整洁!我可能应该指出,pureXML不是一个扩展,而是DB2查询处理引擎的一部分!绝对看起来简单高效-希望不会影响性能-我目前不确定DBMS的参与程度-如果这只是表示层,或者仍然可能引发DBMS错误?我会仔细阅读的,谢谢!这基本上是可行的,但是结果显示了这个长字符串,而不仅仅是“false”或“true”-“false”前缀是不必要的,但是我找不到解释字符串或如何抑制它的文档。我可以定位和替换,但只有在必要时。谢谢我使用的DB应用程序没有显示XML序言。尝试将它包装在
XMLCAST(…作为CHAR)中。
如果我将它包装在XMLCAST(…作为VARCHAR(10))中,效果会非常好。解决了-谢谢!!