SQL日期时间值

SQL日期时间值

问题描述:

我在varchar变量中格式化了数据“2009-07-17T00:00:00-05:00”。如何使用查询或TSQL将此数据转换为MS SQL服务器中的日期时间字段?SQL日期时间值

+0

什么是最后的'-05:00'?某种形式的毫秒? – dotjoe 2009-10-12 21:52:40

+0

dotjoe:这是时区。 – 2009-10-12 21:53:58

+1

是所有的字段'like'%-05:00''?可能要使用字符串函数将其转换为常规日期时间。 – dotjoe 2009-10-12 22:00:52

如果你是SQL Server 2008上,您可以使用datetimeoffset类型:

select cast('2009-07-17T00:00:00-05:00' as datetimeoffset) 

既然你是2005年,datetimeoffset数据类型不适用于你。您应该决定是否要分开保存时区信息。如果你只是想在datetime部分,只是从字符串中去除时区部分,将它转换为datetime

select cast(left('2009-07-17T00:00:00-5:00', 19) as datetime) 
+0

不知何故,它不工作。显示“类型datetimeoffset不是已定义的系统类型”。我该怎么办? – THEn 2009-10-12 21:54:11

+0

你正在使用什么SQL Server版本? 'datetimeoffset'在2008年是新的。 – 2009-10-12 21:55:16

+0

Microsoft SQL Server 2005 - 9.00.1406.00(X64)Mar 3 2007 19:53:24 Copyright(c)1988-2005 Windows NT 5.2上的Microsoft Corporation企业版(64位) 3790:Service Pack 2) – THEn 2009-10-12 21:56:03

演员为DATETIME将无法正常工作,但该格式是一个有效的XML日期时间格式,所以您可以首先通过XML类型路由演员阵容:

declare @d varchar(50); 
select @d = '2009-07-17T00:00:00-05:00'; 

select x.value(N'.', N'datetime') from (select cast(@d as xml) as x) as t; 
+0

是的。这些数据来自XML文件。我使用SELECT [StartDate] FROM OPENXML(@iTree,'/ List/DailyUpdate',2)WITH([STARTDATE] varchar(50))在SQL中以何种方式执行?我试过datetime它不工作... – THEn 2009-10-12 22:09:24

+1

你可以使用XML方法,而不是OPENXML? OPENXML是一个恐龙...只要说'SELECT xmlfield.value(N'(/ List/Daily/Update)[1]',N'datetime')FROM table'。使用OPENXML,您需要使用WITH语法来指定返回模式,并将StartDate映射到datetime:'SELECT StartDate FROM OPENXML(...)WITH(StartDate DATETIME)'。 – 2009-10-12 22:17:16

+0

此外,答案中的查询不断显示“从字符串转换日期时间时转换失败。”任何想法 ? – THEn 2009-10-12 22:46:18