2012-10-29 313 views
4

我試圖使用Excel將一些舊的SQL Server數據轉移到SQL Server中。看起來Import/Export Data應用程序自動將大多數數據列設置爲NVARCHAR(255)。我有問題,是我的一列應該是DATE類型,但其中的所有數據看起來像這樣18.08.2000 14:48:15將NVARCHAR(255)轉換爲DATE

所以,當我嘗試使用此查詢:

SELECT CONVERT(Date, DATE_TIME, 113) 
FROM someTable 

我得到這個錯誤:

Msg 9807, Level 16, State 0, Line 1
The input character string does not follow style 113, either change the input character string or use a different style.

[styles]CAST and CONVERT (Transact-SQL)在我的情況下工作的無。

任何意見或幫助,非常感謝。

解決:

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

所以沒有人猜測,你能指定你的SQL Server版本嗎? –

+0

是的,它是SQL Server 2012 – crashtestxxx

回答

1

所以,如果它永遠不會成爲有用的人,這是改變數據類型NVARCHAR到DATETIME確切的代碼:

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

據我可以告訴 - 風格沒有。 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 

這似乎很合理,沒有?

+0

+1確認它也適用於SQL小提琴 –

+0

Im sorry,如果我不清楚。 Im試圖做的是將列數據類型從NVARCHAR(255)更改爲MS-SQL數據庫中的DATE或DATETIME。我猜103會工作,但是當我嘗試使用這段代碼,並用'SET @INPUT ='DATE_TIME''替換SET @input = '18 .08.2000 14:48:15''時,我仍然得到相同的錯誤。 – crashtestxxx

+1

你需要做'SET @INPUT = DATE_TIME'(沒有單引號!否則你把'@ input'變量設置爲'DATE_TIME'作爲一個值 - 而**當然**不會轉換爲一個'datetime' ... –

1

如果您使用的是SQL Server 2012中,嘗試:

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

或者,如果不行,請嘗試: ''

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

愛沙尼亞文化特別是使用作爲日期分隔符(d.MM.yyyy H:mm:ss),所以它應該工作。

(似乎都做工精細的SQL小提琴)