如何处理 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;
我从第三方供应商处获取以下字符串格式的日期 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;