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点”。有人请告诉我吗?
答案 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}}