在SQL中将dd / mm / yyyy VARCHAR转换为yyyy-dd-mm DATETIME

时间:2017-08-01 13:35:45

标签: sql sql-server-2005

我正在尝试将dd/mm/yyyy格式(01/08/2017)的varchar(255)字符串(dp.Date)转换为yyyy-mm-dd format(2017-08-01)中的日期时间。

我已尝试使用CONVERT(DATETIME, dp.Date, 120),但我最终收到以下错误消息。

  

将char数据类型转换为datetime数据类型会导致日期时间值超出范围。

2 个答案:

答案 0 :(得分:0)

我设法使用 CAST + SUBSTRING 解决了这个问题。

cast(substring(dp.Date,7,4)+ substring(dp.Date,4,2)+ substring(dp.Date,1,2)AS datetime)

答案 1 :(得分: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