0

我有一个用于从 MSSQL Server 检索数据的查询块。该查询有一些硬编码的日期值,需要每天更改以导入每日提要。我需要自动化这个执行。我现在正在使用 cloverETL 执行查询。这是查询(它是检索共享点活动数据的查询)

use
DocAve_AuditDB;
DECLARE
@ParameterValue VARCHAR(100),
@SQL
VARCHAR(MAX)
SET
@SQL = STUFF((SELECT 'UNION ALL SELECT COL_ItemTypeName, COL_UserName, COL_MachineIp, COL_DocLocation, DATEADD(SECOND, COL_Occurred / 1000, ''19700101 00:00'') as Date_Occurred, COL_EventAction FROM '+ TABLE_NAME + ' WHERE DATEADD(SECOND, COL_Occurred / 1000, ''19700101 00:00'') BETWEEN '+ '''20120515'''+ 'AND' + '''20120516'''+ 'AND ' + 'COL_ItemTypeName='+ '''Document''' AS 'data()'
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME LIKE '%2012_05%'
FOR
XML PATH('')),1,10,'')
EXEC
(@SQL)

在上面的块中,我希望 TABLE_NAME LIKE 参数,即 %2012_05% 是从当前数据中检索到的变量,也是 between 子句中的日期值

BETWEEN '+ '''20120515'''+ 'AND' + '''20120516''' 是今天的日期 1 和今天的日期

应该创建一个小的Java程序来处理这个问题,还是可以直接在查询本身中完成?如果是的话怎么办?

提前致谢

4

2 回答 2

1

使用GETDATE()CURRENT_TIMESTAMP获取当前日期(和时间)。

CONVERT()与格式说明符一起使用112可将当前时间戳转换为格式为YYYYMMDD.

用于DATEADD()日期/时间的计算(如减去一天)。

用于SUBSTRING()从格式化的日期字符串中减去部分以将它们重新排列为%YYYY_MM%格式。

于 2012-05-31T22:52:12.017 回答
0

或者您可以在 DBInputTable 中使用内联 ctl 表示法:

SELECT 'UNION ALL SELECT COL_ItemTypeName, COL_UserName, COL_MachineIp, COL_DocLocation, DATEADD(SECOND, COL_Occurred / 1000, ''19700101 00:00'') as Date_Occurred, COL_EventAction FROM `date2str(today(), "yyyy_MM")` WHERE DATEADD(SECOND, COL_Occurred / 1000, ''19700101 00:00'') BETWEEN '+ '''`date2str(today(), "yyyyMMdd")`'''+ 'AND' + '''`date2str(dateAdd(today(),1,day), "yyyyMMdd")`'''+ 'AND ' + 'COL_ItemTypeName='+ '''Document''' AS 'data()'
于 2013-06-21T08:19:18.633 回答