次のクエリ(MSSQL 2008の場合)について考えてみます。
SELECT dateModified FROM SomeTable;
これにより、floatがjavascript形式(1970年からミリ秒)で返されます。
dateModified
============
1301598290687
1071003581343
1311951478593
これをselectでdatetime2に変換するにはどうすればよいですか?
次のクエリ(MSSQL 2008の場合)について考えてみます。
SELECT dateModified FROM SomeTable;
これにより、floatがjavascript形式(1970年からミリ秒)で返されます。
dateModified
============
1301598290687
1071003581343
1311951478593
これをselectでdatetime2に変換するにはどうすればよいですか?
@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 を参照してください
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