2015-01-15 76 views
1

我有一個基於msdb..sysjobhistory表建立的查詢,它是我的SQL Server的MSDB數據庫。我希望能夠讓我回到以前的日子。 (在這個例子中,1/14/2015將是昨天)當run_date信息是YYYYMMDD整數格式時,我該怎麼辦?作爲INT到查詢日期的SQL日期

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

回答

1

你可以嘗試轉換的是INT首先爲VARCHAR,然後使用112「樣式」(爲Cast and Convert的MSDN網頁上的說明),將其轉換成一個真正的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) 
          ) 
+1

這給了我什麼,我需要。我只是簡單地抓住這些數據,將其提供給我正在爲我正在創建的內部DBA Audit應用程序創建的數據庫。這工作很好。謝謝@srutzky! – NCollinsTE 2015-01-15 18:39:58

+0

@NCollinsTE沒問題。一定要看到我剛發佈的更新。 – 2015-01-15 18:41:20