2017-04-27 62 views
1

我有一個需求來編寫一個Informix查詢,該查詢將獲取表格的所有記錄,除週五和週六以外的所有周到本週Informix查詢EXCLUDE本週的週五和週六以及週四和週日的下午4點到8點

防爆的日子,晚上8點下午4點之間的數據:

如果我在我的桌子下面記錄

Name ProcessStartTime Status 

Name1 2017-04-01 17:00:02.000 SUCCESS(Saturday) 
Name2 2017-04-02 21:00:02.000 SUCCESS(Sunday) 
Name3 2017-04-03 01:00:02.000 SUCCESS(Monday) 
Name4 2017-04-04 05:00:02.000 SUCCESS(Tuesday) 
Name5 2017-04-05 18:00:02.000 SUCCESS(Wednesday) 
Name6 2017-04-05 15:00:02.000 SUCCESS(Wednesday) 
Name7 2017-04-06 23:00:02.000 SUCCESS(Thursday) 
Name8 2017-04-07 15:00:02.000 SUCCESS(Friday) 

如果我執行查詢,我應該得到以下記錄LY,

Name2 2017-04-02 21:00:02.000 SUCCESS(Sunday) 
Name3 2017-04-03 01:00:02.000 SUCCESS(Monday) 
Name4 2017-04-04 05:00:02.000 SUCCESS(Tuesday) 
Name6 2017-04-05 15:00:02.000 SUCCESS(Wednesday) 
Name6 2017-04-06 23:00:02.000 SUCCESS(Thursday) 

,其餘數據不能取,因爲這些記錄是在星期五或星期六以及下午4點至晚上8點之間(不僅是週五和週六,但一週中的所有天)日期時間。

我有我的SQL Server查詢這裏下面這是在SSMS做工精細,

SET DATEFIRST 1 

SELECT Name, ProcessStartTime, Status 
FROM @events 
WHERE datepart(DW, ProcessStartTime) NOT IN (5,6) 
AND (datepart(hh, ProcessStartTime) < 16 
     OR  
     ProcessStartTime > DATEADD(dd, DATEDIFF(dd, 0, ProcessStartTime), '08:00:00')) 

GO 

,但我需要改變這個查詢到Informix的查詢。我搜索了很多東西,找到了找到那個的方法,但沒有成功。任何人都可以幫助我嗎?

+0

應該包含還是排除20:00:00?是從16:00直到20:00之前嗎?或'從16:00:00.00000直到幷包括20:00:00.00000'?或者是其他東西? –

回答

1

這類似於Simon Riddleanswer,而是使用一個明確的時間範圍註釋:

SELECT Name, ProcessStartTime, Status 
    FROM Events 
WHERE WEEKDAY(ProcessStartTime) NOT IN (5, 6) 
    AND (EXTEND(ProcessStartTime, HOUR TO SECOND) < DATETIME(16:00:00) HOUR TO SECOND 
    OR EXTEND(ProcessStartTime, HOUR TO SECOND) >= DATETIME(20:00:00) HOUR TO SECOND 
     ) 

我喜歡這一點,因爲我覺得它更容易調整它包含/排除日期的確切端你想要的範圍。我認爲這個符號可能是你想要的;如果應該包括下午8點的事件而不是排除在外,則>=可能需要爲>。請注意,BETWEEN ... AND運算符包含範圍內的兩個端點。

2

使用這個WHERE的查詢子句應該工作:

WHERE WEEKDAY(ProcessStartTime) NOT IN (5,6) 
AND EXTEND(ProcessStartTime, HOUR TO HOUR)::char(2)::int 
    NOT BETWEEN 16 AND 20 

雙投是必要的,因爲沒有從日期時間沒有內置的轉換操作爲整數。

+0

從20:00:01到20:59:59的所有時間也被'EXTEND(ProcessStartTime,HOUR TO HOUR)排除:: char(2):: int NOT BETWEEN 16 AND 20' –

相關問題