Sql 从yearmonth中减去month
在SQL中,我有一个从YYYYMM值中减去一个月的条件。请帮帮我。我能得到下面的答案Sql 从yearmonth中减去month,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,在SQL中,我有一个从YYYYMM值中减去一个月的条件。请帮帮我。我能得到下面的答案 select 201608 - 1; 但当它是01个月时,它就不起作用了 在这方面帮助我,无需检查01个月的if状况 我也使用了DATADD和DATEDIFF函数,但无法获得预期的结果。使用这些: 选择DATEDIFF(DAY,DATEADD(DAY,-1,@dateToCheck),GETDATE()) 返回日期2016-07-01或者,您可以使用一些数学方法将整数转换为基数12整数,减去月份并返回原始编码
select 201608 - 1;
但当它是01个月时,它就不起作用了
在这方面帮助我,无需检查01个月的if状况
我也使用了DATADD和DATEDIFF函数,但无法获得预期的结果。使用这些:
选择DATEDIFF(DAY,DATEADD(DAY,-1,@dateToCheck),GETDATE())
返回日期2016-07-01或者,您可以使用一些数学方法将整数转换为基数12整数,减去月份并返回原始编码
select d, m, res=(dd/12)*100 + dd%12 + 1
from (
select *, (d/100)*12 + d%100 - 1 - m as dd
from ( --sample data, m = months to substract
values
(201608, 10), (201608, 2), (201601, 1), (201601, 12)
) t(d,m)
) t
您使用的是PostgreSQL还是SQL Server?你把两者都标记了,那不是“年月”。这是一个整数。你不能期望你使用的任何数据库都是智能的,并且能够识别它是什么。您必须告诉db这是一个日期/时间值。在您这样做之前,您所要做的就是提供两个正则数,db将很乐意使用SQL Server对其执行标准算术运算,错误地选择了Postgres这是一个T-SQL示例-您使用MS SQL和Postgres标记了您的问题,这两种标记使用了不同的syntax@CIPHER你想让它以int 201607的形式返回吗?@Cappelletti-我在你的建议的帮助下得到了答案,谢谢你一顿
选择子字符串(convert(varchar(10),DateAdd(MM,-1,cast)(cast(201608 as varchar(10))+“01”作为日期),112),1,6)
@密码做得好您可以通过CONVERT(INTEGER,CONVERT(VARCHAR,DateAdd(MM,-1,cast(cast(201608作为VARCHAR(10))+“01”作为日期)),112)排除子字符串
select d, m, res=(dd/12)*100 + dd%12 + 1
from (
select *, (d/100)*12 + d%100 - 1 - m as dd
from ( --sample data, m = months to substract
values
(201608, 10), (201608, 2), (201601, 1), (201601, 12)
) t(d,m)
) t