2016-10-21 35 views
1

Informix不是我的正常環境,它處理日期時間值的方式會引發我循環。我無法想象這很難,但對於我的生活,我還沒有弄明白。Informix - 需要爲Where子句創建日期時間參數

這是SQL:

SELECT agentid, 
    extension As Ext, 
    resourcefirstname As FirstNm, 
    resourcelastname As LastNm, 
    Min(eventdatetime) As FirstIn 
    FROM agentstatedetail AS asdr Join 
    resource As r On asdr.agentid = r.resourceid 
    WHERE asdr.eventdatetime BETWEEN '2016-10-20 04:00:00' AND '2016-10-21 03:59:59' 
AND eventtype = 3 
AND assignedteamid = 14 
Group By agentid, extension, resourcefirstname, resourcelastname 
Order By Min(eventdatetime) 

一切正常原樣,但在條款之間的日期目前進入manually-不是最佳的。我只需要一些方法來描述「昨天凌晨4點」和「今天凌晨4點」請問有人請我介紹一下嗎?

回答

3

使用Informix版本12.10.FC6DE,我可以這樣做:

SELECT 
    TODAY::DATETIME YEAR TO SECOND AS today_zerohour 
    , TODAY::DATETIME YEAR TO SECOND - '20:00:00'::INTERVAL HOUR TO SECOND AS yesterday_dawn 
    , TODAY::DATETIME YEAR TO SECOND + '04:00:00'::INTERVAL HOUR TO SECOND AS today_dawn 
FROM 
    systables 
WHERE 
    tabid = 1; 

,並返回:

today_zerohour  yesterday_dawn  today_dawn 

2016-10-21 00:00:00 2016-10-20 04:00:00 2016-10-21 04:00:00 

因此,這裏發生了什麼:

  • 運營商TODAY退貨系統日期爲DATE類型。該DATE類型沒有我想要的精度(它只有一年,月和日),所以我投的值(轉換運算符是::)的DATETIME精度從今年第二(小時,分,秒設定零):

    TODAY::DATETIME YEAR TO SECOND

  • 在Informix中,對於加法或減法與DATETIME值返回另一個DATETIME價值,我需要加上或減去一個INTERVAL值。所以我創建了2個INTERVAL值。

  • 一個20小時內從今天值減去INTERVAL(再次轉換運算符::被使用時,該時間從字符串轉換爲一個INTERVAL):

    '20:00:00'::INTERVAL HOUR TO SECOND

  • 之一INTERVAL 4小時添加到今天值:

    '04:00:00'::INTERVAL HOUR TO SECOND

+0

謝謝路易斯,那確實有竅門。我看到它背後的邏輯,但仍然沒有把握它的原因和方式。顯然,太過困於MS SQL。無論如何,再次感謝 - 我的頭可以停止傷害現在。 –

+0

@craigwhite我添加了一些信息,試圖解釋。 –

+0

這樣做很整齊。 –