问题描述
我从第三方供应商 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')。告诉我