考虑以下查询(在 MSSQL 2008 中):
SELECT dateModified FROM SomeTable;
这将返回 javascript 格式的浮点数(自 1970 年以来的毫秒数):
dateModified
============
1301598290687
1071003581343
1311951478593
如何在选择中将其转换为 datetime2?
考虑以下查询(在 MSSQL 2008 中):
SELECT dateModified FROM SomeTable;
这将返回 javascript 格式的浮点数(自 1970 年以来的毫秒数):
dateModified
============
1301598290687
1071003581343
1311951478593
如何在选择中将其转换为 datetime2?
在这里使用@Mikeal Eriksson 的答案中的公式。
我会将浮点数转换为 bigint,然后创建日期时间:
select
DATEADD(MILLISECOND,
cast(dateModified as bigint) % 1000,
DATEADD(SECOND, cast(dateModified as bigint) / 1000, '19700101'))
from sometable
一些 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