Informix - 需要为Where子句创建日期时间参数

时间:2016-10-21 16:20:02

标签: informix

Informix不是我的正常环境,它处理日期时间值的方式就是让我循环。我无法想象这很难,但对于我的生活,我还无法弄明白。

这是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)

一切都按原样运行,但是当前输入的子句中的日期是手动输入的 - 不是最佳的。我只是需要一些方法来描述“昨天凌晨4点”和“今天凌晨4点”。有人请告诉我吗?

1 个答案:

答案 0 :(得分: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值。

  • 从今天的值中减去一个INTERVAL 20小时(再次使用强制转换运算符::,这次是从字符串转换为INTERVAL):

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

  • INTERVAL一个'04:00:00'::INTERVAL HOUR TO SECOND小时添加到今天的值:

    {{1}}