2017-08-01 81 views
1

我試圖轉換具有dd/mm/yyyy格式的varchar(255)字符串(dp.Date)(01/08/2017) datetime以yyyy-mm-dd格式(2017-08-01)。將dd/mm/yyyy VARCHAR轉換爲yyyy-dd-mm DATETIME in SQL

我使用CONVERT(DATETIME,dp.Date,120)試過,但我結束與「一個char數據類型到datetime數據類型的轉換導致的外的範圍日期時間值「。錯誤消息。

由於提前,

+2

您需要使用'CONVERT'給它一個格式,而不是'CAST':CONVERT(DATETIME,dp.Date,120)' – Lamak

+0

對不起,我的意思是寫CONVERT .. 。正如你所看到的,我也使用了CONVERT的語法......編輯了這篇文章......謝謝你的支持! –

+0

然後你的字符串超出了日期的範圍(比如'05/15/2017') – Lamak

回答

0

我已經成功使用CAST + SUBSTRING來解決它。

投(子(dp.Date,7,4)+子(dp.Date,4,2)+子(dp.Date,1,2)爲DATETIME)

0

您可以PARSENAME嘗試如下。執行樣本數據:

DECLARE @TestTable TABLE (Id INT, [Date] VARCHAR (255)); 

INSERT INTO @TestTable (Id, [Date]) VALUES 
(1, '01/08/2017'), (2, '21/09/2017'), (3, '15/12/2017'); 

SELECT CAST(
      CONCAT(PARSENAME(DateValue, 1), '-', 
        PARSENAME(DateValue, 2), '-', 
        PARSENAME(DateValue, 3)) 
     AS DATETIME) AS [Date] 
FROM (
    SELECT REPLACE([Date], '/', '.') AS DateValue FROM @TestTable 
) D