这样的SQL怎么写(SQL SERVER)

比如我要查询按月份查询10,11月的数据,但其实10月的数据显示的是9月28到10月27号的数据,这样要怎么实现呢?

那你就从9月28开始查啊

方法中传递月份参数,通过一个计算获取每个月份的对应日期范围,比如:10:[2017-09-28, 2017-10-27],11: [2017-10-28, 2017-11-27]。
然后实际执行SQL语句参数是算出来的日期范围即可。

这种情况应该是要定义一个日期对比表了,需要记录每个月第一天和最后一天对应的日期(可以与标准日期放一起),这样你以后按照这个日期表捞日子就行了

你可以先写好一个自定义函数,然后 入参是你需要自定义的月份和你想提前的天数(方便你后期维护这个日期的开始日期),出参是你的开始起跟结束日期。然后去写你这个SQL的时候调用这个函数,就可以了

如果是固定年份,可以参考下边sql,直接在代码中把指定日期拼好,

select * from tableName where dateColumn between '2017-09-28' and '2017-10-27'

如果是不定年份的话,就比较复杂了,需要先判断月份,再判断日期。

    select * from tableName 
    where (MONTH(dateColumn)=9 AND DATE(dateColumn)>=28) 
          OR (MONTH(dateColumn)=10 AND DATE(dateColumn)<=27)

select 10 月份, 。。。(你所需的字段) from 表A where 月份 between 9.28 and 10.27 union all select 11 月份,。。。。(你所需的字段) from 表A where 月份 between 11.01 and 11.30

select * from table where date between '2017-09-28' and '2017-11-30'

select * from table where (date between '2017-09-28' and '2017-10-27') or (date between '2017-11-1' and '2017-11-30')

图片说明

不是很清楚表的结构

select 需要显示的字段名 from table where 时间 between xx年9月28 and xx年10月27

from 表A where 月份 between 9.28 and 10.27 union all select 11 月份,。。。。(你所需的字段) from 表A where 月份 between 11.01 and 11.30

这样,把时间转成yyyy-MM-dd的这种,然后减去几天就能得到你这种了。
例如:select CONVERT(nvarchar(50), GETDATE()-3,23)

Select 入职时间 ,
YEAR( case when DAY(入职时间)<15 THEN DateAdd(M,-1,入职时间) else 入职时间 end ) * 100 + MONTH ( case when DAY(入职时间)<15 THEN DateAdd(M,-1,入职时间) else 入职时间 end ) as 月份,
name from T_Date
Where 入职时间 >= DATEADD(M,-1,@s + '-28') AND 入职时间 < @e + '-27'

输入年月,获取此年月的1号,然后得到本月27号,以及上月1号,得到上月28号就行
不知道你用Mysql还是PLsql,参考一下方法然后改吧。。

 select *
  from temp c
 where c.date between
       add_months(to_date(&beginym, 'yyyy-mm'), -1)+27 and
       to_date(&endym, 'yyyy-mm')+26;

把日期直接限定在9.28和10.27

select * from 表A where 月份 >= DATEADD(M,-1,月份 + '-28') and 月份<=月份+‘-27’

这个问题是关于日期处理的问题。如果只关心月份,可以对日前单独处理一下就行。

SELECT a.* ,
CONVERT(VARCHAR(7), newtime, 120) AS months
FROM ( SELECT DAY(AddTime) AS days ,
AddTime ,
CASE WHEN DAY(AddTime) > 27
THEN DATEADD(MONTH, 1, AddTime)
ELSE AddTime
END AS newtime
FROM dbo.t_Equ_OutLog
) a

            上图
            ![图片说明](https://img-ask.csdn.net/upload/201803/10/1520651380_798902.png)

图片说明