SQL日期时间值
如果你是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)
不知何故,它不工作。显示“类型datetimeoffset不是已定义的系统类型”。我该怎么办? – THEn 2009-10-12 21:54:11
你正在使用什么SQL Server版本? 'datetimeoffset'在2008年是新的。 – 2009-10-12 21:55:16
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;
是的。这些数据来自XML文件。我使用SELECT [StartDate] FROM OPENXML(@iTree,'/ List/DailyUpdate',2)WITH([STARTDATE] varchar(50))在SQL中以何种方式执行?我试过datetime它不工作... – THEn 2009-10-12 22:09:24
你可以使用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
此外,答案中的查询不断显示“从字符串转换日期时间时转换失败。”任何想法 ? – THEn 2009-10-12 22:46:18
什么是最后的'-05:00'?某种形式的毫秒? – dotjoe 2009-10-12 21:52:40
dotjoe:这是时区。 – 2009-10-12 21:53:58
是所有的字段'like'%-05:00''?可能要使用字符串函数将其转换为常规日期时间。 – dotjoe 2009-10-12 22:00:52