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))...
この種の複雑なアルゴリズムをあちこちに書くことは避けてください。)