用一select语句会实现日期的条件查询么

用一select语句能实现日期的条件查询么?
有一个表 数据假设 有 ID ,DATE 两列
逻辑是如果DATA是29号-31号 显示的值是下月1号并且在2月的时候逻辑不一样是日期大于26号 变成“3月1号”
用一句SELECT语句能实现么?

------解决思路----------------------
SELECT ID
,CASE WHEN MONTH([DATE])=2 AND DAY([DATE])>26 THEN CONVERT(VARCHAR(4),[DATE],120)+'-03-01'
  WHEN MONTH([DATE])<>2 AND DAY([DATE])>=29 THEN CONVERT(VARCHAR(7),DATEADD(MONTH,1,[DATE]),120)+'-01'
  ELSE [DATE] END [DATE]
FROM TB
可以这样
------解决思路----------------------


select 
ID,
case 
when (MONTH([date]) = MONTH([date]+3)) then [date]
else CONVERT(VARCHAR(7),[date]+3,120)+'-01' end [date]
From TB


------解决思路----------------------
那个4月28号也会显示5月1,你确定是你想要的

另外,你具体哪不清楚呢
------解决思路----------------------
楼主不知道月的天数有四种吗: 28,29,30,31,
说了29号-31号是一种情况, 那其余的1-28号没有对应要显示的值吗
考虑问题不能丢三落四的
------解决思路----------------------
引用:
我试了下 很好用 能给我解释下原理么?小弟新手  百度了下感觉理解的还是不好。。。



你的要求是月底还差3天的时候,就要跳到下一个月的1号, 那么, 我们直接给时间添加两天, 然后在通过MONTH 函数得出现在是几月份, 然后比较你实际的月份, 如果相等,则证明你的月份在增加了3天后, 还是在本月,也就是 说, 月有31天时,日期就小于29, 月有30天时,日期小于28, 在二月份也一样,你不需要去管到底还有几天到下个月,反正你只要知道, 加上这几天, 会不会到下个月了。 12月份, 也不另外, 因为到 29 30 号时,日期到了1月, 也是跟当前时间的月份不相等的。
------解决思路----------------------
至于到底你需要在月底相差几天,就跳到下一个月, 直接改动增加的天数就OK了。 

MONTH  函数, 就是获取当前表示的日期, 是在哪个月。