请教一下SqlServer如何处理年月问题

SqlServer 中如何将一个指定的nvarchar类型的年月(2022-12)减去或加上一个月
我试了 SELECT CONVERT(VARCHAR(7),DATEADD (month,-1,'2014-12-11'),120)
这个办法,但是需要在拼接一个日期
请问有什么办法可以解决这个问题

img


当去掉拼接的日期时会报错,如何解决

SELECT CONVERT(VARCHAR(7),DATEADD(MONTH,-1,'2014-12'+'-01'),21) 除了这种拼接还有其他办法吗

需要拼上日期。通常的设计应该是存储date,可以取出年月日时分秒进行各种运算。
考虑字符串宽度固定,取字符串运算吧。
select case when cast(substring('2022-1',6,2) as int)-1 =0 then trim(cast(cast(substring('2022-1',1,4) as int)-1 as char))+'-12'
else trim(substring('2022-1',1,4))+ '-'+ trim(cast(cast(substring('2022-1',6,2) as int)-1 as char)) end
select case when cast(substring('2022-12',6,2) as int)-1 =0 then trim(cast(cast(substring('2022-12',1,4) as int)-1 as char))+'-12'
else trim(substring('2022-12',1,4))+ '-'+ trim(cast(cast(substring('2022-12',6,2) as int)-1 as char)) end
正常取值:

img

跨年取值:

img


select CAST('2004-10' AS datetime); 错误。
select CAST('2004-10-10' AS datetime);正确。

img