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

时间:2019-06-11 07:07:04

标签: sql tsql

如何在SQL中从Consumer<String>中减去一个月?

例如从RuntimeExceptionpublic static Consumer<String[]> validateLength3 = (String[] input) -> { if(input.length != 3) throw new RuntimeException("length not equals 3");}; 的示例。

3 个答案:

答案 0 :(得分:2)

由于您不建议使用日期格式。但是对于您的情况,您可以使用以下查询来获得预期的结果。

使用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

Demo on db<>fiddle

答案 1 :(得分:2)

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

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

请参见demo

答案 2 :(得分:0)

这带有警告是非常丑陋的,但是如果您要在上个月输入字符串,然后再次输入字符串,则可以将dateadd转换为date,然后再返回字符串,更可怕!

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