繁体   English   中英

在 SQL 中从 mm/yy 中减去一个月

[英]Subtract one month from mm/yy in SQL

如何从 SQL 中的mm/yy中减去一个月?

例如从02/2301/23

由于您的日期格式不是推荐的格式。 但是对于您的场景,您可以使用以下查询来获得预期的结果。

使用DATEFROMPARTS()和字符串函数,您可以将其构造为日期,而DATEADD(MONTH, -1, date)将有助于减去一个月。

DECLARE @TestTable TABLE (DateVal VARCHAR(5));
INSERT INTO @TestTable (DateVal) VALUES ('02/23'), ('01/23'), ('03/30');

SELECT DateVal,
       RIGHT(CONVERT(VARCHAR(8), DATEADD(MONTH, -1, DATEFROMPARTS(RIGHT(DateVal, 2), LEFT(DateVal, 2), '01')), 3), 5) AS Result
FROM @TestTable

结果:

DateVal     Result
----------------------
02/23       01/23
01/23       12/22
03/30       02/30

db<>fiddle 上的演示

我认为您需要使用convert()获取有效日期,然后使用dateadd()减去 1 个月,最后使用format()以字符串格式获取日期:

select
  format(dateadd(month, -1, convert(date, concat('01/', datecolumnname), 3)), 'MM/yy')
from tablename

请参阅演示

这带有一个非常丑陋的警告,但如果你想要上个月的字符串然后再次字符串,也许转换为日期做 dateadd 然后回到字符串,可怕!

with cte_d
as
(select '01/23' as stringdate
 union
 select '12/17' as stringdate
)

select stringdate
       ,cast(Month(dateadd(month,-1,cast(right(stringdate,2) 
         + left(stringdate,2) + '01' as date))) as nvarchar(2))
        +'/'+
         right(cast(Year(dateadd(month,-1,cast(right(stringdate,2) 
         + left(stringdate,2) + '01' as date))) as nvarchar(4)),2) as [NewDate]
from cte_d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM