我认为您不需要EXTEND
在这种情况下使用 -EXTEND
用于更改 DATETIME 和 INTERVAL 值的比例。
UTC_TO_DATETIME
已经返回一个 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))...
并避免到处编写这种复杂的算法。)