将NVARCHAR(255)转换为DATE

cra*_*xxx 6 sql-server datetime type-conversion sql-server-2012

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

消息9807,级别16,状态0,行1
输入字符串不遵循样式113,更改输入字符串或使用不同的样式.

None of the [styles] from CAST and CONVERT (Transact-SQL) are working in my case.

Any advise or help is greatly appreciated.

SOLVED:

UPDATE myTable
SET columnName = CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
ALTER TABLE myTable
ALTER COLUMN columnName SMALLDATETIME
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 6

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

DECLARE @input NVARCHAR(255)

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

SELECT CONVERT(DATETIME, @input, 103)
Run Code Online (Sandbox Code Playgroud)

给我输出:

2000-08-18 14:48:15.000
Run Code Online (Sandbox Code Playgroud)

这似乎很合理,没有?

  • 你需要做`SET @INPUT = DATE_TIME`(没有单引号!否则你将`@input`变量设置为`DATE_TIME`作为一个值 - 当然****不转换为a `datetime` .... (2认同)

lc.*_*lc. 5

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

PARSE(Date AS datetime USING 'en-GB')
Run Code Online (Sandbox Code Playgroud)

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

PARSE(Date AS datetime USING 'Et-EE')
Run Code Online (Sandbox Code Playgroud)

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

(两者似乎在 SQL Fiddle 上都工作得很好)


cra*_*xxx 5

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

UPDATE myTable
SET columnName = CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
ALTER TABLE myTable
ALTER COLUMN columnName SMALLDATETIME
Run Code Online (Sandbox Code Playgroud)