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)
                             )