Select DB2 日期格式为 YYYYMMDD 的最新记录
Select most recent records by DB2 date in form of YYYYMMDD
我正在将记录从 DB2 数据源导入 MS SQL 服务器目标。
记录的日期格式为 20150302/YYYYMMDD
,但我只想要基于当前服务器日期的最近 14 天。
能否就如何根据此日期格式 DATEADD(d, - 1, { fn CURDATE() })
select 提出一些建议。
谢谢!
如果你想要 SQL 服务器中的逻辑,那么你很幸运,因为你可以将 YYYYMMDD 格式转换为日期:
where cast(datecol as date) >= cast(getdate() - 14 as date)
(假设没有未来的日期。)
如果要在 DB2 端执行此操作,可以使用 to_date()
:
where to_date(datecol, 'YYYYMMDD') >= current date - 14 days
最好在 DB2 端执行此操作,以减少带来的记录数。
此外,从性能的角度来看,最好将静态日期转换为数字日期并与 table 中的列进行比较。而不是将 table 中的数字日期转换为实际日期类型进行比较。
where numdate >= int(replace(char(current_date - 14 days,iso),'-',''))
这样做将使您能够利用 numdate 上的索引。此外,DB2 将只需要执行一次此转换。
根据您的平台和版本,您可能有更简单的方法将日期数据类型转换为数字日期。但以上内容适用于 DB2 for i,并且应该适用于大多数(所有?)DB2 版本和平台。
您可能会发现创建一个 UDF 来为您进行此转换是值得的。
我正在将记录从 DB2 数据源导入 MS SQL 服务器目标。
记录的日期格式为 20150302/YYYYMMDD
,但我只想要基于当前服务器日期的最近 14 天。
能否就如何根据此日期格式 DATEADD(d, - 1, { fn CURDATE() })
select 提出一些建议。
谢谢!
如果你想要 SQL 服务器中的逻辑,那么你很幸运,因为你可以将 YYYYMMDD 格式转换为日期:
where cast(datecol as date) >= cast(getdate() - 14 as date)
(假设没有未来的日期。)
如果要在 DB2 端执行此操作,可以使用 to_date()
:
where to_date(datecol, 'YYYYMMDD') >= current date - 14 days
最好在 DB2 端执行此操作,以减少带来的记录数。
此外,从性能的角度来看,最好将静态日期转换为数字日期并与 table 中的列进行比较。而不是将 table 中的数字日期转换为实际日期类型进行比较。
where numdate >= int(replace(char(current_date - 14 days,iso),'-',''))
这样做将使您能够利用 numdate 上的索引。此外,DB2 将只需要执行一次此转换。
根据您的平台和版本,您可能有更简单的方法将日期数据类型转换为数字日期。但以上内容适用于 DB2 for i,并且应该适用于大多数(所有?)DB2 版本和平台。
您可能会发现创建一个 UDF 来为您进行此转换是值得的。