我正在尝试在 select 语句中将十进制值转换为日期
SELECT user_id, extend(dbinfo("UTC_TO_DATETIME",min(creationdate)), year to fraction) AS earned_date
FROM 消息
但是我收到了这个错误
Value exceeds limit of INTEGER precision
表中的字段定义是这样的
creationDate decimal(14,0) NOT NULL
看来我没有使用正确的方式进行转换,知道吗?
最佳答案
我认为您不需要在此上下文中使用 EXTEND
- EXTEND
用于更改 DATETIME 和 INTERVAL 值的比例。
UTC_TO_DATETIME
returns a DATETIME已经值了。
你试过吗:
SELECT user_id, dbinfo("UTC_TO_DATETIME",min(creationdate)) AS earned_date
FROM message
那会产生什么?
更新
啊,举个例子吧!
您传递的值不是 UTC_TO_DATETIME
预期的 UTC 日期时间。该函数需要一个表示秒而不是毫秒的整数。就这么简单。
DBINFO('UTC_TO_DATETIME', 1329994172574)
超出整数精度。
DBINFO('UTC_TO_DATETIME', 1329994172574/1000)
另一方面,产生:
2012-02-23 21:49:32
,我想这正是您所期望的?
如果您查看我之前提供的链接,它会解释小数秒的处理方式。 (剧透:它们被忽略了。)
如果小数秒非常重要,我猜你将不得不EXTEND
此函数的结果为小数秒,然后将 MOD(creationdate,1000)/1000 添加到它.
例如:
SELECT user_id,
(dbinfo("UTC_TO_DATETIME", MIN(creationdate)/1000 )::DATETIME YEAR TO FRACTION(3)
+ (MOD(MIN(creationdate),1000)/1000) UNITS FRACTION) AS earned_date
FROM message
(但就个人而言,无论如何我都倾向于将这个逻辑放入 SPL 中,因此您可以这样调用它:
SELECT user_id, millis_to_time(MIN(creationdate))...
并避免到处写这种复杂的算法。)
关于sql - 将十进制值转换为日期 - Informix DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865083/