Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从yearmonth中减去month_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 从yearmonth中减去month

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整数,减去月份并返回原始编码

在SQL中,我有一个从YYYYMM值中减去一个月的条件。请帮帮我。我能得到下面的答案

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