我认为在这种情况下您不需要使用
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))...
并避免在各个地方编写此类复杂算法。