Sql server 2012 SQL日期作为查询的INT-to-Date

Sql server 2012 SQL日期作为查询的INT-to-Date,sql-server-2012,datetime-format,Sql Server 2012,Datetime Format,我在我的SQL Server的msdb数据库的msdb..sysjobhistory表上构建了一个查询。我只想把前一天的东西还给我。(在本例中,2015年1月14日将是昨天)当运行日期为YYYYMMDD整数格式时,我该怎么做 SELECT server , jh.run_date , jh.run_time , j.name , jh.run_duration , jh.step_name , r

我在我的SQL Server的msdb数据库的msdb..sysjobhistory表上构建了一个查询。我只想把前一天的东西还给我。(在本例中,2015年1月14日将是昨天)当运行日期为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
请告知


-Nick

您可以尝试先将该INT转换为VARCHAR,然后使用112“样式”(在MSDN页面上注明),将其转换为real DATETIME。例如:

选择CONVERT(日期时间,CONVERT(VARCHAR(10),20150115),112)
当然,单独这样做会使
[run\u date]
字段(如果有)上的索引无效。如果是这种情况,那么您只需执行DATEADD以减一天,然后再转换回VARCHAR,再转换回INT。例如:

选择转换(INT,
转换(VARCHAR(10),
日期(日),
-1,
转换(日期时间,转换(VARCHAR(10),20150115),112)
),
112
)
);
在我的SQL Server 2012实例上,
[run\u date]
上没有索引,但最好还是不要在函数周围加一个字段

如果只使用
DATETIME
值,例如由
GETDATE()
提供的值,它看起来像:

其中jh.step\u id=0
和jh.run_date=CONVERT(INT,
转换(VARCHAR(10),
DATEADD(天-1,GETDATE()),
112)
)

这给了我所需要的。我只是简单地获取这些数据,将其输入到我正在为内部DBA审计应用程序创建的数据库中。这工作做得很好。谢谢你,@srutzky@没问题。一定要看到我刚刚发布的更新。