将NVARCHAR(255)转换为DATE

时间:2012-10-29 15:44:59

标签: sql-server datetime sql-server-2012 type-conversion

我正在尝试使用Excel将一些旧的SQL Server数据传输到SQL Server中。似乎Import/Export Data应用程序会自动将大多数数据列设置为NVARCHAR(255)。我遇到的问题是,我的列之一应该是DATE类型,但其中的所有数据都显示为此18.08.2000 14:48:15

所以,当我尝试使用这个查询时:

SELECT CONVERT(Date, DATE_TIME,  113)
FROM someTable

我收到此错误:

  

Msg 9807,Level 16,State 0,Line 1
  输入字符串不遵循样式113,要么更改输入字符串,要么使用不同的样式。

来自CAST and CONVERT (Transact-SQL)[styles]无法解决我的问题。

非常感谢任何建议或帮助。

解决:

UPDATE myTable
SET columnName = CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
ALTER TABLE myTable
ALTER COLUMN columnName SMALLDATETIME

3 个答案:

答案 0 :(得分:6)

据我所知 - 风格没有。 103(英国/法国)应该工作 - 不是吗?

DECLARE @input NVARCHAR(255)

SET @input = '18.08.2000 14:48:15'

SELECT CONVERT(DATETIME, @input, 103)

给我输出:

2000-08-18 14:48:15.000

这似乎很合理,不是吗?

答案 1 :(得分:3)

因此,如果它对任何人都有用,那么这就是将数据类型NVARCHAR更改为DATETIME的确切代码:

UPDATE myTable
SET columnName = CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
ALTER TABLE myTable
ALTER COLUMN columnName SMALLDATETIME

答案 2 :(得分:2)

如果您使用的是SQL Server 2012,请尝试:

PARSE(Date AS datetime USING 'en-GB')

如果这不起作用,请尝试:

PARSE(Date AS datetime USING 'Et-EE')

爱沙尼亚文化特别使用'。'作为日期分隔符(d.MM.yyyy H:mm:ss),所以它应该有效。

(两者似乎都适用于SQL Fiddle)