我认为您不需要在这种情况下使用 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
(但就我个人而言,无论如何我都倾向于将 this 逻辑放入 SPL,因此您可以这样称呼它:
SELECT user_id, millis_to_time(MIN(creationdate))... 并避免到处写这种复杂的算法。)