8

我正在尝试使用 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,要么更改输入字符串,要么使用不同的样式。

[styles]在我的情况下,CAST 和 CONVERT (Transact-SQL)中的任何一个都不起作用。

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

解决了:

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

3 回答 3

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

这似乎很合理,不是吗?

于 2012-10-29T15:49:53.740 回答
6

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

UPDATE myTable
SET columnName = CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
ALTER TABLE myTable
ALTER COLUMN columnName SMALLDATETIME
于 2012-10-29T17:41:38.140 回答
4

如果您使用的是 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 上正常工作)

于 2012-10-29T15:50:29.460 回答