从字符串转换日期和/或时间时获得转换失败的错误

4 人不认可

表中有一列是 ret_period ,包含 varchar 数据类型。我试图写一个查询,将列的数据类型从varchar转换为日期数据类型,但当从字符串转换日期和/或时间时,它抛出一个错误,即转换失败。

谁能让我知道如何解决这个问题? 以下是该列的样本数据。

ret_period
012018
012019
012020
2 个评论
日期有日、月、年三部分。你似乎漏掉了日期。什么 日期 '012020' ?2020年1月1日?2020年1月7日?2020年1月31日?还是别的什么?
SMor
2000年后的20年,我们重蹈覆辙?不--就是不!
sql-server
pranith reddy
pranith reddy
发布于 2022-03-07
1 个回答
LukStorms
LukStorms
发布于 2022-03-07
0 人赞同

你可以将字符串转换为可以转换/转换为DATE的格式。

select *
, TRY_CAST(CONCAT(RIGHT(ret_period, 4),'-',LEFT(ret_period, 2),'-01') AS DATE) AS ret_date
from (values 
('012018'), 
('012019'), 
('012020') 
) q(ret_period)

但是请注意,yyyyMMDD格式应该比yyyy-MM-DD更安全,因为它在将其转换为DATETIME时不依赖于语言。

或者使用DATEFROMPARTS函数

select *
, DATEFROMPARTS(RIGHT(ret_period, 4), LEFT(ret_period, 2), 1) AS ret_date
from (values 
('012018'), 
('012019'), 
('012020') 
) q(ret_period)