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

Convert dd/mm/yyyy VARCHAR to yyyy-dd-mm DATETIME in SQL

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

我试过使用 CONVERT(DATETIME, dp.Date, 120),但我得到了以下错误消息。

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

我已经使用 CAST+SUBSTRING.

解决了这个问题

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

您可以尝试使用 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