Informix - 需要为 Where 子句创建日期时间参数
Informix - Need to create date time parameters for Where clause
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)
一切正常,但 Between 子句中的日期当前是手动输入的 - 不是最优的。我只需要一些方法来描述 "yesterday at 4:00 AM" 和 "Today at 4:00 AM" 有人能告诉我吗?
使用 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;
它 returns:
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
return将系统日期设置为DATE
类型。 DATE
类型没有我想要的精度(它只有年、月和日),因此我将值(转换运算符为 ::
)转换为 DATETIME
,精度为年秒(时分秒归零):
TODAY::DATETIME YEAR TO SECOND
在 Informix 中,对于 DATETIME
值与 return 另一个 DATETIME
值的加法或减法,我需要加减一个 INTERVAL
值。所以我创建了 2 INTERVAL
个值。
从今天的值中减去 20 小时中的一个 INTERVAL
(再次使用转换运算符 ::
,这次是从字符串转换为 INTERVAL
):
'20:00:00'::INTERVAL HOUR TO SECOND
4 小时中的一个 INTERVAL
添加到今天的值:
'04:00:00'::INTERVAL HOUR TO SECOND
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)
一切正常,但 Between 子句中的日期当前是手动输入的 - 不是最优的。我只需要一些方法来描述 "yesterday at 4:00 AM" 和 "Today at 4:00 AM" 有人能告诉我吗?
使用 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;
它 returns:
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
return将系统日期设置为DATE
类型。DATE
类型没有我想要的精度(它只有年、月和日),因此我将值(转换运算符为::
)转换为DATETIME
,精度为年秒(时分秒归零):TODAY::DATETIME YEAR TO SECOND
在 Informix 中,对于
DATETIME
值与 return 另一个DATETIME
值的加法或减法,我需要加减一个INTERVAL
值。所以我创建了 2INTERVAL
个值。从今天的值中减去 20 小时中的一个
INTERVAL
(再次使用转换运算符::
,这次是从字符串转换为INTERVAL
):'20:00:00'::INTERVAL HOUR TO SECOND
4 小时中的一个
INTERVAL
添加到今天的值:'04:00:00'::INTERVAL HOUR TO SECOND