如何处理 SQL 服务器中的 MMddyyyy 日期格式?

How to handle MMddyyyy date format in SQL Server?

我从第三方供应商处获取以下字符串格式的日期 API:

MM/dd/yyyy
yyyy/MM/dd
yyyyMMdd
yyyy-MM-dd
MMddyyyy

所以有些记录的出生日期是 yyyy-MM-dd 而有些记录的出生日期是其他格式。 除了格式 MMddyyyy,所有格式都使用 SQL Convert/Cast 函数转换为 yyyy-MM-dd

如何将 MMddyyyy 转换为 yyyy-MM-dd

我正在 SQL Server 2019 中尝试以下语句,但它不起作用:

DECLARE @dt varchar(8)= '02022020';
SELECT CAST(@dt as date) s1;

Msg 241, Level 16, State 1, Line 20
Conversion failed when converting date and/or time from character string.

有什么方法可以在 SQL 服务器中处理这种情况?

请注意:我正在尝试使用 SQL 存储过程实现以下 ADF 代码。

coalesce(toDate(DOB,'MM/dd/yyyy')
        ,toDate(DOB,'yyyy/MM/dd')
        ,toDate(DOB,'yyyyMMdd')
        ,toDate(DOB,'MMddyyyy')
        ,toDate(DOB,'yyyy-MM-dd'))

据我所知,MMddyyyy 没有样式代码,所以最简单的方法可能是先将字符串转换为 yyyyMMdd,例如

CONCAT(RIGHT(@dt, 4), LEFT(@dt, 4))

然后将其转换为日期:

DECLARE @dt varchar(8)= '02022020';
SELECT CONVERT(DATE, CONCAT(RIGHT(@dt, 4), LEFT(@dt, 4)), 112)

您尝试过以下方法吗? SELECT 格式(你的日期,'MM-dd-yy')。让我知道

下面是处理所有格式的 SQL 语句。

MM/dd/yyyy
yyyy/MM/dd
yyyyMMdd
yyyy-MM-dd
MMddyyyy


  DECLARE @date varchar(10)= '2020-03-15';
    SELECT CASE
               WHEN @date IS NULL
               THEN NULL
               WHEN TRY_CONVERT(DATE, @date) IS NOT NULL
               THEN CAST(@date AS DATE) 
               WHEN TRY_CONVERT(DATE, @date) IS NULL
               THEN CONVERT(DATE, CONCAT(RIGHT(@date, 4), LEFT(@date, 4)), 112)
           END;