如何处理 SQL Server 中的 MMddyyyy 日期格式?

问题描述

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

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

所以有些记录在 yyyy-MM-dd 中有出生日期,有些记录有其他格式的 dob。 除格式 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 Server 中处理这种情况吗?

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

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

解决方法

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

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

然后将其转换为日期:

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

以下是处理所有格式的 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,LEFT(@date,112)
           END;
,

您是否尝试过以下操作?选择格式(您的日期,'MM-dd-yy')。告诉我