2017-08-01 79 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