Informix中CURRENT与TODAY的区别及extend函数功能咨询
搞懂Informix里的
EXTEND()、CURRENT和TODAY 嘿,作为Informix新手,对日期时间相关的内置函数和常量感到困惑太正常了——我刚接触的时候也踩过不少坑。结合你给出的代码片段,我给你逐一解释清楚:
一、EXTEND()函数到底做什么?
Informix的EXTEND()是处理日期/时间类型的核心工具之一,主要有两个用途:提取时间片段和扩展精度。
在你的代码里:
extend( CURRENT, hour to hour )
这是它最常用的场景——从完整的日期时间值中提取指定的部分。这里就是从CURRENT这个包含年月日时分秒的时间戳里,只把小时部分提取出来,返回的是类似"09"、"18"这样的两位字符串格式的小时数。
举几个其他例子帮你理解:
extend(CURRENT, minute to minute):提取当前的分钟数,比如"45"extend(CURRENT, year to day):提取当前的年月日部分,返回"2024-05-20"这样的日期字符串extend(TODAY, YEAR TO SECOND):把TODAY(只有日期)扩展成带时分秒的完整时间戳,结果是"2024-05-20 00:00:00"
二、CURRENT和TODAY的本质区别
这俩都是Informix内置的日期时间常量,但完全不是一回事:
TODAY:是DATE类型,只包含年、月、日三个维度,没有任何时间信息。不管你一天中的哪个时刻调用它,只要没跨午夜,它的值就固定是当天的日期,比如2024-05-20。而且它支持直接加减整数来调整日期,比如TODAY+1就是明天,TODAY-7就是一周前。CURRENT:是DATETIME YEAR TO SECOND类型,包含完整的日期和时间(年、月、日、时、分、秒)。每次调用它都会返回数据库服务器当前的精确时间,比如2024-05-20 15:22:30。如果需要判断具体的时间点(比如你的代码里判断小时),就必须用CURRENT。
回到你的代码逻辑:
LET dtRefDate = TODAY; IF extend( CURRENT, hour to hour ) BETWEEN '06' AND '23' THEN LET dtRefDate = TODAY+1; END IF;
这段代码的意思是:默认把参考日期设为今天,但如果当前时间的小时在6点到23点之间,就把参考日期改成明天。这里用TODAY来处理日期本身,用CURRENT来获取当前的小时数做判断,逻辑完全没问题。
小补充:更灵活的写法
你代码里用字符串比较小时是可行的,但也可以把提取的小时转成整数来比较,可读性更强:
IF INT(extend(CURRENT, hour to hour)) BETWEEN 6 AND 23 THEN
内容的提问来源于stack exchange,提问作者Miroslav Savel
相关产品推荐
相关产品推荐

