2012-11-07 4 views
0

제 3 교대 사용자를 위해 보고서를 가져 오는 쿼리를 사용하고 있습니다.AM 용 DATEPART를 사용하면 올바르게 작동하지만 PM 쿼리 용으로 작동하지 않습니다.

보고서가 0 개의 결과로 발송되었을 때 방금 알아챈 문제점은 다음날 아침 6 시부 터 5시 59 분까지 실행되도록 설정 한 것입니다. 날짜 필드가 = GETDATE이므로 이전 밤 (1800-2359) 결과가 표시되지 않습니다. 나는 이것을 -12 시간과 같이하는 것으로 생각하고 있었지만 결과를보기 위해 언제든지 버튼을 누를 수 있습니다.

그래서 교대가 끝나기 전에 그것을 밀면 1 차 교대 입력이 표시됩니다. 나는 자정 이전에 또는 자정 이전에 버튼을 누르더라도 다음 날 아침에만 1800-0559에서 실행되기를 원합니다. 나는 이것이 의미가 있기를 바랍니다. 그 사이에 2359에 도달 한 후에 00이라는 값을 인식할지는 확실하지 않습니다. VB.net 응용 프로그램에 내장되어 있으며 결과를 얻고 싶을 때 언제든지 버튼을 누를 수 있습니다. 이는 경영진이 문제가 발생할 때 직원이 실시간으로 데이터를 입력해야하므로 수행중인 작업을 추적합니다.

도움 주셔서 감사합니다. 나는 충분히 감각을 만들었 으면 좋겠다! : D

특정 시간 범위를 검사 할 때 내 생각
SELECT 
    Assignment, Datemodified, General, 
    IncNumber, NextSteps, PDCRStatus, 
    RootCause, Status, Summary, 
    Timings, UserID 
FROM 
    Turnover 
WHERE DATEPART(HOUR, datemodified) between 18 and 05 
AND CONVERT(NVARCHAR(50),datemodified,103) = CONVERT(NVARCHAR(50),GETDATE(),103); 
+2

숫자가 18보다 크거나 같고 5보다 작거나 같을 수있는 방법은 무엇입니까? – hvd

답변

0

, 날짜 시간, 즉 이상 변화하고, 다음의 0500 시간에 하루에 1800 시간. 쿼리에서 시간 만 확인하고 있지만 날짜는 고려되지 않은 것으로 나타났습니다. 함께 시간뿐만 아니라 날짜를 확인할 수 있다면 작동하는 것 같아요. 현재로서는 내 컴퓨터에 SQL Server가 없으며 샘플 쿼리로 도울 수있었습니다.

건배, 희망이 있습니다.

+0

날짜가 = GETDATE로 간주되지만, 내 쿼리가 2359 이후에 실행되면 이전 날짜보다 6 시간이 아니라 해당 날짜 만보고 있기 때문에 결과가 나타납니다. – user1800374

0

나는 어제 18 시부 터 시작하는 모든 데이터를 원한다고 가정합니다.

SELECT 
    Assignment, Datemodified, General, 
    IncNumber, NextSteps, PDCRStatus, 
    RootCause, Status, Summary, 
    Timings, UserID 
FROM 
    Turnover 
WHERE datemodified >= dateadd(HH,-6,convert(datetime,convert(date,GETDATE()))) 

getdate를 사용하여 현재 날짜 시간을 얻고 그 날짜를 추출합니다. 다시 datetime으로 변환 할 때 나는 00:00을 가졌으므로 dateadd로 6 시간을 빼기 때문에 어제 18:00를 선택합니다. 그러나 나는 이것이 특정 시간에 어떻게 행동해야하는지 모른다. 어제 18:00 인 으로 이동합니다. 즉, 23:59에 시작할 때 29 시간 59 분의 간격이 표시됩니다. 00:00에 시작하면 6 시간이 표시됩니다.