SQL Server CONVERT不能正确转换时区?

时间:2012-07-31 21:06:42

标签: sql-server sql-server-2008

根据this MSDN article

“可选的时区指示符Z用于更轻松地将具有时区信息的XML datetime 值映射到没有SQL Server datetime 值的值时区.Z是时区UTC-0的指示符。其他时区用+或 - 方向的HH:MM偏移表示。例如:2006-12-12T23:45:12-08:00。“< / p>

但是当我跑步时:

declare @d datetime;
set @d=getdate();
print CONVERT(varchar(40), @d, 127)

结果是2012-07-31T14:04:11.447。没有时区部分。我做错了什么?

1 个答案:

答案 0 :(得分:3)

DateTime类型不包含时区,GETDATE()函数返回DateTime。

相反,您需要使用SQL Server的DateTimeOffset类型,这是SQL Server 2008中引入的。这将使您的示例:

declare @d datetimeoffset;
set @d=sysdatetimeoffset();
print CONVERT(varchar(40), @d, 127)

请注意使用SYSDATETIMEOFFSET()功能。

那就是说,在实践中你实际上想要实现什么目标?如果你有一些实际的无时区数据(例如DateTime列中的数据),你试图从中提取时区,那将会很棘手。