我怎样才能在sql server中转换这些数据

时间:2010-09-04 00:13:41

标签: sql sql-server-2008

我的日期栏类型NVARCHAR(50)示例日期2010年9月2日星期五 我想CONVERT DATETIME可以进行ORDER BY ..

我使用ORDER BY CONVERT(DATETIME,M.DeletedDate,102)DESC,我试过103,104,105 ......

错误消息=从字符串转换日期和/或时间时转换失败。

如何将该值转换为DATETIME或SMALLDATETIME 请帮帮我!

3 个答案:

答案 0 :(得分:5)

类型列表记录在CAST and CONVERT (Transact-SQL)。与您的风格最接近的是106(d mon yyy),但这会理解2 Sep 2010,实际上它也会理解2 September 2010。但是任何风格都不会理解2 September 2010 Friday。这种风格非常不寻常,计算机不需要提醒日期是哪一天,他们知道......

您将不得不将数据格式更改为有效的数据格式。实际上,您应该使用DATETIME商店作为DATETIME开始,而不是进行昂贵的转换。如果数据来自外国来源,那么你必须在将存储到表中之前将其正确地转换为,这就是整个ETL过程的全部内容。

答案 1 :(得分:1)

它不喜欢结束时的一周。这是剥离它的一种方法:

DECLARE @Dt nvarchar(50)
SET @Dt = '02 September 2010 Friday'
SELECT Convert(datetime, Substring(@DT, 1, Len(@Dt) - CharIndex(' ', Reverse(@Dt))), 106)

但是,您可能已经知道存储为字符串的日期非常低效。如果有任何方法可以将列更改为实际的日期时间列,或者添加另一个可以存储实际日期时间的日期时间列,则应该执行此操作。如果列上有任何条件,您将获得不良性能,因为它将被强制为表中的每一行执行字符串转换。哎哟!

答案 2 :(得分:0)

感谢您的回答。 我添加了一个类型smalldatetime的新列和触发器来设置该列。我将使用此列进行排序并显示另一列的时间。