日期:2014-05-18  浏览次数:20374 次

请教一个关于毫秒级日期格式的问题
读取别人生成的数据库,表中有一字段是datetime,数据是精确到毫秒的如:2011-08-23 23:03:04.710
但由于功能上的原因.只能使用 select * from tablename 取出表中数据 .
我用VC的ADO读取到了一个double 类型的数据如:40778.960471180559,我怎么样才能转成有毫秒级的日期型?

------解决方案--------------------
SQL code
select convert(datetime, 40778.960471180559) -- 2011-08-25 23:03:04.710

------解决方案--------------------
这个double表示与1970-1-1的时间差,1代表1天,小数就是天内的时间
------解决方案--------------------
SQL code

select convert(datetime, 40778.960471180559)
2011-08-25 23:03:04.710

--关于日期格式和convert函数的一些资料:
数据类型转换函数

(以下两种函数功能类似,但是 convert 在进行日期转换时还提供了丰富的样式,cast 只能进行普通的日期转换)

函数名称 参数 示例 描述

convert(数据类型[(长度)],表达式[,样式])

select convert(nvarchar,123) 返回123

select N'年龄:'+convert(nvarchar,23)

返回 年龄:23(注意:如果想要在结果中正确显示中

文需要在给定的字符串前面加上 N,加 N 是为了使数据库识别Unicode 字符)

select convert(nvarchar ,getdate())

将一种数据类型的表达式显式转换为另一种数据类型的表达式。长度:如果数据类型允许设置长度,可以设置长度,例如varchar(10)样式:用于将日期类型数据转换为字符数据类型的日期格式的样式。见下表

返回 04 28 2009 10:21PM

select convert(nvarchar ,getdate(),101)

返回 04/28/2009

select convert(nvarchar ,getdate(),120)

返回 2009-04-28 12:22:21

Select convert(nvarchar(10) ,getdate(),120)

返回 2009-04-28

cast(表达式 as 数据类型[(长度)])

select cast(123 as nvarchar)返回 123

select N'年龄:'+cast(23 as nvarchar)

返回 年龄:23

将一种数据类型的表达式显式转换为另一种数据类型的表达式。日期类型数据转为字符数据类型的日期格式的部分样式表当两个不同数据类型的表达式用运算符组合后,数据类型优先级规则指定将优先级较低的数据类型优先转换为优先级较高的型。 如果此转换不是所支持的隐式转换,则返回错误。 当两个操作数表达式具有相同的数据类型时,运算的结果便为该数据类型。如果需要把优先级高的数据类型转换优先级低的数据类型时需要使用数据类型转换函数进行显示转换。

 

SQL Server 2005 对数据类型使用以下优先级顺序(先高后低):

不带世纪数位 (yy)

带世纪数位 (yyyy)

标准

输入/输出-

0 或 100

默认设置mon dd yyyy hh:miAM(或 PM)1 101

美国

mm/dd/yyyy 2 102 ANSI yy.mm.dd 3103

英国/法国

dd/mm/yy 4 104

德国

dd.mm.yy 5 105

意大利

dd-mm-yy 120

ODBC 规范

yyyy-mm-ddhh:mi:ss(24h)