2014-10-13 297 views
0

如何轉換ddydyyyy,這是一個varchar(8)日期格式(dd/mm/yyyy)?convert varchar(ddmmyyyy)轉換爲日期格式

我有一個接受日期varchar(8)參數的存儲過程。

我想在插入數據庫之前將其轉換爲日期格式。 我試圖用

INSERT INTO mytable(createdDate) VALUES (CONVERT(date, CONVERT(varchar(8), @date), 106)); 

錯誤:

Conversion failed when converting date and/or time from character string. 

createdDate列的類型:日期

+0

你爲什麼要再次將varchar轉換爲varchar?是轉換(日期,@日期,106)不工作? – Mukund

+1

插入數據庫時​​,不需要將varchar轉換爲日期。它會自動由db處理。 INSERT INTO MyTable(createdDate)值('dd/mm/yyyy')和sql server會爲你弄明白。 – jadavparesh06

+0

按照此鏈接以供參考 http://stackoverflow.com/questions/5287427/how-to-insert-datetime-into-the-sql-database-table – jadavparesh06

回答

2

ddmmyyyy是不是一個有效的日期格式。您需要先將該字符串轉換爲可解析爲DATE/DATETIME的內容。最快的方法可能是將SUBSTRING件件變成mm/dd/yyyy格式。這確實轉換成功。但你有一個VARCHAR(8)。所以你或者需要增加VARCHAR(10)(或者更好,CHAR(10)),或者聲明一個局部變量來保存修改後的值。

例如:

DECLARE @Date VARCHAR(8); -- input parameter 
SET @Date = '25032014'; 

DECLARE @Date2 CHAR(10); 
SET @Date2 = SUBSTRING(@Date, 3, 2) 
      + '/' + SUBSTRING(@Date, 1, 2) 
      + '/' + SUBSTRING(@Date, 5, 4); 

SELECT @Date2, CONVERT(DATE, @Date2); 
-- 03/25/2014  2014-03-25 

編輯: 其實,我找到了一個稍微簡單的方式。我從這種方法開始,但意識到它不適用於ddmmyyyy而不是mmddyyyy。我不知何故錯過了dd/mm/yyyy有適當的日期樣式編號。因此,只需將兩個斜槓添加到傳入的字符串中,然後調用CONVERT就行,但只有當您使用103作爲「樣式」時。和第一種解決方案一樣,它需要將傳入參數更改爲VARCHAR(10)CHAR(10)而不是VARCHAR(8),或者將局部變量創建爲CHAR(10)

DECLARE @Date VARCHAR(8); -- input parameter 
SET @Date = '25032014'; 

DECLARE @Date2 CHAR(10); 
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/'); 

SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy 
-- 25/03/2014  2014-03-25 

轉換「樣式」可以在MSDN頁CAST and CONVERT找到。