SQL Date as INT to Date for Query
SQL Date as INT to Date for Query
我有一个基于 msdb..sysjobhistory table 我的 SQL 服务器的 MSDB 数据库的查询。我希望只能将之前日期的东西还给我。 (在此示例中,1/14/2015 将是昨天)当 run_date 信息采用 YYYYMMDD 整数格式时,我该如何处理?
SELECT server
, jh.run_date
, jh.run_time
, j.name
, jh.run_duration
, jh.step_name
, run_status
, message
FROM msdb..sysjobhistory jh
INNER JOIN msdb..sysjobs j ON jh.job_id = j.job_id
WHERE jh.step_id = 0
请指教。
-尼克
您可以尝试先将该 INT 转换为 VARCHAR,然后使用 112 "Style"(在 MSDN 页面上注明 Cast and Convert),将其转换为真正的 DATETIME。例如:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), 20150115), 112)
当然,单独执行此操作会使 [run_date]
字段上的索引无效(如果有的话)。如果是这种情况,那么您只需执行 DATEADD 以减去一天,然后转换回 VARCHAR,然后再转换为 INT。例如:
SELECT CONVERT(INT,
CONVERT(VARCHAR(10),
DATEADD(DAY,
-1,
CONVERT(DATETIME, CONVERT(VARCHAR(10), 20150115), 112)
),
112
)
);
在我的 SQL Server 2012 实例上 [run_date]
上没有索引,但最好还是不要将字段环绕在函数周围。
如果只使用 DATETIME
值,例如 GETDATE()
提供的值,它看起来像:
WHERE jh.step_id = 0
AND jh.run_date = CONVERT(INT,
CONVERT(VARCHAR(10),
DATEADD(DAY, -1, GETDATE()),
112)
)
我有一个基于 msdb..sysjobhistory table 我的 SQL 服务器的 MSDB 数据库的查询。我希望只能将之前日期的东西还给我。 (在此示例中,1/14/2015 将是昨天)当 run_date 信息采用 YYYYMMDD 整数格式时,我该如何处理?
SELECT server
, jh.run_date
, jh.run_time
, j.name
, jh.run_duration
, jh.step_name
, run_status
, message
FROM msdb..sysjobhistory jh
INNER JOIN msdb..sysjobs j ON jh.job_id = j.job_id
WHERE jh.step_id = 0
请指教。
-尼克
您可以尝试先将该 INT 转换为 VARCHAR,然后使用 112 "Style"(在 MSDN 页面上注明 Cast and Convert),将其转换为真正的 DATETIME。例如:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), 20150115), 112)
当然,单独执行此操作会使 [run_date]
字段上的索引无效(如果有的话)。如果是这种情况,那么您只需执行 DATEADD 以减去一天,然后转换回 VARCHAR,然后再转换为 INT。例如:
SELECT CONVERT(INT,
CONVERT(VARCHAR(10),
DATEADD(DAY,
-1,
CONVERT(DATETIME, CONVERT(VARCHAR(10), 20150115), 112)
),
112
)
);
在我的 SQL Server 2012 实例上 [run_date]
上没有索引,但最好还是不要将字段环绕在函数周围。
如果只使用 DATETIME
值,例如 GETDATE()
提供的值,它看起来像:
WHERE jh.step_id = 0
AND jh.run_date = CONVERT(INT,
CONVERT(VARCHAR(10),
DATEADD(DAY, -1, GETDATE()),
112)
)