转换前验证日期,又名。 ISDATE() 等效项
Validate dates before conversion, aka. ISDATE() equivalent
DB2 版本为 9.7.0.7
我有一个平面文件,需要在插入产品之前进行全面验证 table。为了便于分析,我将其解析为 table,其中所有列均为 VARCHAR
.
其中一项任务是验证日期。我需要能够找到具体的无效日期,报告范围(频率)和解决方案(原因)。
我在 Sybase 和 SQL 服务器中使用 ISDATE()
,其中 return 有效日期为 1,无效日期为 0。在 Teradata 中,我离开加入到系统目录中的 SYS_CALENDAR
table。自从我上次进入 DB2 环境以来已经有大约 15 年了,但我相信两者的类似物都不存在。
在这个 DB2 环境中,我的角色仅限于 QA,这意味着我不能创建 T-SQL 过程或 UDF。
这个话题很聪明,让我觉得可能有一些常见的 Table 表达式逻辑可以在查询中使用:
ISDATE equivalent of DB2
然而,这个解决方案不尽如人意,因为它只考虑格式 - 无效(但格式正确)的日期如“2016-04-31”或“2016-02-30”的存在将引发一个错误,查询将 return 没有行。
我需要 return 所有行,确定每一行是有效还是无效(或者只是 return 无效行以供调查,甚至) - 所以做 CAST
或 CONVERT
,或在测试环境中插入格式化的 table 将不起作用。
是否有类似 ISDATE()
、SYS_CALENDAR
或其他解决方案来获得无法转换为 [=17] 的按行显示日期的相同最终产品=],在执行 conversion/insert?
之前
您可以使用 PureXML
扩展程序,如下所示:
SELECT
XMLCAST(XMLQUERY('string($D) castable as xs:date' PASSING mycolumn as D ) AS INT)
FROM
mytable
这将 return 1 或 0。
DB2 版本为 9.7.0.7
我有一个平面文件,需要在插入产品之前进行全面验证 table。为了便于分析,我将其解析为 table,其中所有列均为 VARCHAR
.
其中一项任务是验证日期。我需要能够找到具体的无效日期,报告范围(频率)和解决方案(原因)。
我在 Sybase 和 SQL 服务器中使用 ISDATE()
,其中 return 有效日期为 1,无效日期为 0。在 Teradata 中,我离开加入到系统目录中的 SYS_CALENDAR
table。自从我上次进入 DB2 环境以来已经有大约 15 年了,但我相信两者的类似物都不存在。
在这个 DB2 环境中,我的角色仅限于 QA,这意味着我不能创建 T-SQL 过程或 UDF。
这个话题很聪明,让我觉得可能有一些常见的 Table 表达式逻辑可以在查询中使用: ISDATE equivalent of DB2
然而,这个解决方案不尽如人意,因为它只考虑格式 - 无效(但格式正确)的日期如“2016-04-31”或“2016-02-30”的存在将引发一个错误,查询将 return 没有行。
我需要 return 所有行,确定每一行是有效还是无效(或者只是 return 无效行以供调查,甚至) - 所以做 CAST
或 CONVERT
,或在测试环境中插入格式化的 table 将不起作用。
是否有类似 ISDATE()
、SYS_CALENDAR
或其他解决方案来获得无法转换为 [=17] 的按行显示日期的相同最终产品=],在执行 conversion/insert?
您可以使用 PureXML
扩展程序,如下所示:
SELECT
XMLCAST(XMLQUERY('string($D) castable as xs:date' PASSING mycolumn as D ) AS INT)
FROM
mytable
这将 return 1 或 0。