2015-01-15 8 views
1

내 SQL Server의 MSDB 데이터베이스 인 msdb..sysjobhistory 테이블을 기반으로 작성된 쿼리가 있습니다. 나는 단지 이전 날짜로 물건을 돌려 줄 수 있기를 원한다. (이 예에서는 2015 년 1 월 14 일이 어제 일 것입니다.) run_date 정보가 YYYYMMDD 정수 형식 일 때 어떻게해야합니까?쿼리 날짜 INT 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로 다음 (Cast and Convert에 대한 MSDN 페이지에 언급) 112 "스타일"을 사용하여 실제 DATETIME에이를 변환하는 것이 변환 시도 할 수 있습니다. 예를 들어 : 물론

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), 20150115), 112) 

이 존재하는 경우 혼자 [run_date] 필드에 인덱스를 무효화한다고하고. 그렇다면 DATEADD를 사용하여 하루를 빼고 다시 VARCHAR로 변환 한 다음 INT로 변환 할 수 있습니다. 예를 들어 : 내 SQL 서버 2012 인스턴스

SELECT CONVERT(INT, 
       CONVERT(VARCHAR(10), 
         DATEADD(DAY, 
           -1, 
           CONVERT(DATETIME, CONVERT(VARCHAR(10), 20150115), 112) 
          ), 
         112 
        ) 
      ); 

[run_date]에 대한 인덱스는 없지만, 여전히 함수 주위의 필드를 포장하지 않도록 최선을 수 있습니다. 내가 원하는 걸주는 그

WHERE jh.step_id = 0 
AND  jh.run_date = CONVERT(INT, 
           CONVERT(VARCHAR(10), 
             DATEADD(DAY, -1, GETDATE()), 
             112) 
          ) 
+1

:

단지 GETDATE()에서 제공하는 같은 DATETIME 값을 사용하는 경우, 그것은처럼 보일 것입니다. 필자는이 데이터를 DBA 감사 응용 프로그램에 사용할 데이터베이스로 가져 오는 것입니다. 이것은 아름답게 작동했습니다. 고마워, @ srutzky! – NCollinsTE

+0

@NCollinsTE 문제 없습니다. 방금 게시 한 업데이트를 확인하십시오. –