4

次のクエリ(MSSQL 2008の場合)について考えてみます。

SELECT dateModified FROM SomeTable;

これにより、floatがjavascript形式(1970年からミリ秒)で返されます。

dateModified 
============ 
1301598290687 
1071003581343 
1311951478593

これをselectでdatetime2に変換するにはどうすればよいですか?

4

2 に答える 2

10

@Mikeal Eriksson の回答 here の式を使用します。

float を bigint に変換してから、datetime を作成します。

select 
  DATEADD(MILLISECOND, 
          cast(dateModified as bigint) % 1000, 
          DATEADD(SECOND, cast(dateModified as bigint) / 1000, '19700101'))
from sometable

デモで SQL Fiddle を参照してください

于 2013-02-05T21:09:24.880 に答える
-1

Oracle の例 - to_date() を同等のものに置き換えます。

  SELECT (1301598290687/60/60/24/1000) as Days
   , to_date('01-01-1970','dd-mm-yyyy') as start_date
   , to_date('01-01-1970','dd-mm-yyyy')+(1301598290687/60/60/24/1000) as converted_date
  FROM dual
  /

DAYS                START_DATE      CONVERTED_DATE
---------------------------------------------------------
15064.7950310995    1/1/1970        3/31/2011 7:04:51 PM

デュアル テーブルを作成します。

CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)
GO
INSERT INTO DUAL (DUMMY)
 VALUES ('X')
GO
于 2013-02-05T21:57:06.297 に答える