gpt4 book ai didi

sql - 在转换之前验证日期,也就是。 ISDATE() 等效

转载 作者:行者123 更新时间:2023-12-04 20:56:31 24 4
gpt4 key购买 nike

DB2 版本为 9.7.0.7

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

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

我用 ISDATE()在 Sybase 和 SQL Server 中,它返回 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 , 或另一种解决方案,该解决方案可以得到无法转换为 DATE 的日期的逐行表示的相同最终结果,在执行该转换/插入之前?

最佳答案

您可以使用 PureXML扩展如下:

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

这将返回 1 或 0。

关于sql - 在转换之前验证日期,也就是。 ISDATE() 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37055675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com