sqlserver日期条件

上月的21号到本月的20号为本月的日期  然后随着月份日期变动逐渐增加

wlllllll 发布于 2021-1-3 17:03 (编辑于 2021-1-3 17:53)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
zsh331Lv8专家互助
发布于2021-1-3 17:34(编辑于 2021-1-3 18:16)
SELECT
*,
(CASE WHEN DATEPART(dd,日期字段) >= 20 THEN DATEADD(MONTH,1,日期字段) ELSE 日期字段 END) AS T_date
FROM
tablename

-------------

-- 其实这个逻辑很好理解,判断日期中DD值,如果大于等于20,月份值+1得到新日期值;然后通过【新日期值】去做其它逻辑即可;

-------------参考上面语法执行;

-------------------------------

select * from 
(
SELECT
*,
(CASE WHEN DATEPART(dd,日期字段) >= 20 THEN DATEADD(MONTH,1,日期字段) ELSE 日期字段 END) AS T_date
FROM
tablename
) k
where 1=1 
${if(DAY(today())>=20," and CONVERT(VARCHAR(7),T_date,110)="+format(MONTHDELTA(today(),1),"yyyy-MM")," and CONVERT(VARCHAR(7),T_date,110)="+format(today(),"yyyy-MM"))}


  • zsh331 zsh331 回复 wlllllll(提问者) = =一点sql基础都没有?
    2021-01-03 17:44 
  • wlllllll wlllllll(提问者) 不是太会写
    2021-01-03 17:47 
  • Eisen Eisen 回复 wlllllll(提问者) 如果是按你现在说的,应该修改问题为:上月的21号到本月的20号为本月的日期
    2021-01-03 17:49 
  • zsh331 zsh331 回复 Eisen 是的,然后在where条件中,然后根据当前时间是否大于20号,去过滤当前月份数据还是下个月份的数据值即可;-- 卡在新日期字段T_date上;-- 只能说这么多了,给思路不可能把所有的脚本都给你写出来;
    2021-01-03 17:56 
  • zsh331 zsh331 回复 Eisen = =#还是给你贴出来了,拿去用吧!
    2021-01-03 18:16 
最佳回答
0
EisenLv2见习互助
发布于2021-1-3 17:38(编辑于 2021-1-3 17:46)

我理解你的问题是,想自定义当月日期为上月20至本月21!

你有无考虑过这个条件在实际业务中有问题,如本月20~21该归属于哪个月份(即这部分日期可以归属于两个月)?

  • wlllllll wlllllll(提问者) 是的 弄成这样是为了在 sql语句内 加上这样的一个where的条件
    2021-01-03 17:45 
  • wlllllll wlllllll(提问者) 修改问题了 您帮忙解答一下吧
    2021-01-03 17:54 
  • Eisen Eisen 回复 wlllllll(提问者) 你的条件参数传入的格式是什么?年月?还是按钮选择的日期?
    2021-01-03 18:08 
  • wlllllll wlllllll(提问者) 回复 Eisen 日期控件的
    2021-01-03 18:12 
  • Eisen Eisen 回复 wlllllll(提问者) 如果是日期控件那直接传入年月日,这样人为选择日期区间不可行么?不然只能转换月份为具体的日期区间了
    2021-01-03 18:34 
最佳回答
0
刘朋辉Lv2见习互助
发布于2021-1-4 17:12

CONVERT(varchar(5),year(getdate()))+’-’+CONVERT(varchar(5),MONTH(getdate()))+’-’+‘21’


日期形式很多,实现的方法也有很多种,直接把日写死,年月动态的取就可以了

  • 3关注人数
  • 458浏览人数
  • 最后回答于:2021-1-4 17:12
    请选择关闭问题的原因
    确定 取消
    返回顶部