急求高手指点

棉花棒棒糖 2013-12-27 11:05:53
===mssql 2005===
请教个问题.根据时间判断年,月.
比如:
2013-11-24
结果 年:2013 月:11 日:2013-11-24
2013-11-25
结果 年:2013 月:11 日:2013-11-25
2013-11-26
结果 年:2013 月:12 日:2013-11-26
2013-12-25
结果 年:2013 月:12 日:2013-12-25
2013-12-26
结果 年:2014 月:1 日:2013-12-26
......
上月26日到本月25日为本月,遇12月26则年份自动转为下年,月份转为1
...全文
191 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguda2008 2013-12-27
  • 打赏
  • 举报
回复
是要这要的?
WITH MU AS (
SELECT NUMBER,DATEADD(DAY,NUMBER,'2013-1-1') AS DATE
FROM MASTER..SPT_VALUES
WHERE TYPE='P'
)

SELECT TOP 20 YEAR(CASE WHEN DAY(DATE)>25 THEN DATEADD(MONTH,1,DATE) ELSE DATE END) AS YEAR
,MONTH(CASE WHEN DAY(DATE)>25 THEN DATEADD(MONTH,1,DATE) ELSE DATE END) AS MONTH
,DATE AS DAY
FROM MU
WHERE DATEPART(DAY,DATE) BETWEEN 24 AND 31
/*
YEAR	MONTH	DAY
2013	1	2013-01-24 00:00:00.000
2013	1	2013-01-25 00:00:00.000
2013	2	2013-01-26 00:00:00.000
2013	2	2013-01-27 00:00:00.000
2013	2	2013-01-28 00:00:00.000
2013	2	2013-01-29 00:00:00.000
2013	2	2013-01-30 00:00:00.000
2013	2	2013-01-31 00:00:00.000
2013	2	2013-02-24 00:00:00.000
2013	2	2013-02-25 00:00:00.000
2013	3	2013-02-26 00:00:00.000
2013	3	2013-02-27 00:00:00.000
2013	3	2013-02-28 00:00:00.000
2013	3	2013-03-24 00:00:00.000
2013	3	2013-03-25 00:00:00.000
2013	4	2013-03-26 00:00:00.000
2013	4	2013-03-27 00:00:00.000
2013	4	2013-03-28 00:00:00.000
2013	4	2013-03-29 00:00:00.000
2013	4	2013-03-30 00:00:00.000
*/
LongRui888 2013-12-27
  • 打赏
  • 举报
回复
改了一下,加了一个年:
select 
       case when DATEPART(day,d) >=26
                 then datepart(year,DATEADD(month,1,d))  --加1个月,然后取出月份
            else DATEPART(year,d)   --直接取出月份
       end '年',
       
       case when DATEPART(day,d) >=26
                 then datepart(month,DATEADD(month,1,d))  --加1个月,然后取出月份
            else DATEPART(MONTH,d)   --直接取出月份
       end '月',
       
       d as '日'
from 
(
select '2013-11-24' as d union all
select '2013-11-25' union all
select '2013-11-26' union all
select '2013-12-25' union all
select '2013-12-26'
)d
/*
年	月	日
2013	11	2013-11-24
2013	11	2013-11-25
2013	12	2013-11-26
2013	12	2013-12-25
2014	1	2013-12-26
*/
發糞塗牆 2013-12-27
  • 打赏
  • 举报
回复
这个自然有人会写,手僵,打字辛苦,你先看看别人的能不能用吧
白云任去留 2013-12-27
  • 打赏
  • 举报
回复
引用 9 楼 admczy 的回复:
[quote=引用 7 楼 fangxuan 的回复:]

declare @date datetime
set @date='2013-11-26'

select case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then datepart(YY,@date)+1 else datepart(YY,@date) end,
case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then 1 else DATEPART(MM,@date) end,
@date


----------- ----------- -----------------------
2013       11           2013-11-26 00:00:00.000

(1 行受影响)
同年不跨月,转换不了.
[/quote] declare @date datetime set @date='2013-11-26' select case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then datepart(YY,@date)+1 else datepart(YY,@date) end, case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then 1 when datepart(dd,@date)>25 then DATEPART(MM,@date)+1 else DATEPART(MM,@date) end, @date
棉花棒棒糖 2013-12-27
  • 打赏
  • 举报
回复
引用 12 楼 DBA_Huangzj 的回复:
那就比较恶心了,先判断年,然后把年那部分的判断加入月,好长的代码 求真相...
LongRui888 2013-12-27
  • 打赏
  • 举报
回复
引用 楼主 admczy 的回复:
===mssql 2005=== 请教个问题.根据时间判断年,月. 比如: 2013-11-24 结果 年:2013 月:11 日:2013-11-24 2013-11-25 结果 年:2013 月:11 日:2013-11-25 2013-11-26 结果 年:2013 月:12 日:2013-11-26 2013-12-25 结果 年:2013 月:12 日:2013-12-25 2013-12-26 结果 年:2014 月:1 日:2013-12-26 ...... 上月26日到本月25日为本月,遇12月26则年份自动转为下年,月份转为1
是不是这样:
select d,
       case when DATEPART(day,d) >=26
                 then datepart(month,DATEADD(month,1,d))  --加1个月,然后取出月份
            else DATEPART(MONTH,d)   --直接取出月份
       end 'month' 
from 
(
select '2013-11-24' as d union all
select '2013-11-25' union all
select '2013-11-26' union all
select '2013-12-25' union all
select '2013-12-26'
)d
/*
d	month
2013-11-24	11
2013-11-25	11
2013-11-26	12
2013-12-25	12
2013-12-26	1
*/
發糞塗牆 2013-12-27
  • 打赏
  • 举报
回复
那就比较恶心了,先判断年,然后把年那部分的判断加入月,好长的代码
KeepSayingNo 2013-12-27
  • 打赏
  • 举报
回复
试试这个

select case when datepart(d,mytime)>25 then DATEADD(m,1,mytime) else mytime end from Table_4
棉花棒棒糖 2013-12-27
  • 打赏
  • 举报
回复
引用 8 楼 DBA_Huangzj 的回复:
我假设4楼的你的版本能执行, SELECT CASE WHEN DATEPART(MM,GETDATE()) =12 AND datepart(dd,GETDATE())>=26 THEN datepart(year,GETDATE())+1 ELSE datepart(Year,GETDATE()) END --年 ,case datepart(dd,GETDATE()) WHEN 26 THEN DATEPART(MM,DATEADD(mm,1,GETDATE())) ELSE DATEPART(MM,GETDATE()) END --月 , datepart(dd,GETDATE())--日 ,getdate()--整体 结果 (无列名) (无列名) (无列名) (无列名) 2014 12 27 2013-12-27 11:38:30.023
棉花棒棒糖 2013-12-27
  • 打赏
  • 举报
回复
引用 7 楼 fangxuan 的回复:

declare @date datetime
set @date='2013-11-26'

select case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then datepart(YY,@date)+1 else datepart(YY,@date) end,
case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then 1 else DATEPART(MM,@date) end,
@date


----------- ----------- -----------------------
2013       11           2013-11-26 00:00:00.000

(1 行受影响)
同年不跨月,转换不了.
發糞塗牆 2013-12-27
  • 打赏
  • 举报
回复
我假设4楼的你的版本能执行, SELECT CASE WHEN DATEPART(MM,GETDATE()) =12 AND datepart(dd,GETDATE())>=26 THEN datepart(year,GETDATE())+1 ELSE datepart(Year,GETDATE()) END --年 ,case datepart(dd,GETDATE()) WHEN 26 THEN DATEPART(MM,DATEADD(mm,1,GETDATE())) ELSE DATEPART(MM,GETDATE()) END --月 , datepart(dd,GETDATE())--日 ,getdate()--整体
白云任去留 2013-12-27
  • 打赏
  • 举报
回复

declare @date datetime
set @date='2013-12-26'

select case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then datepart(YY,@date)+1 else datepart(YY,@date) end,
case when DATEPART(MM,@date)=12 and datepart(dd,@date)>25 then 1 else DATEPART(MM,@date) end,
@date


----------- ----------- -----------------------
2014        1           2013-12-26 00:00:00.000

(1 行受影响)
棉花棒棒糖 2013-12-27
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
用case when来判断日期,然后dateadd来加月
求实例指导.
發糞塗牆 2013-12-27
  • 打赏
  • 举报
回复
用case when来判断日期,然后dateadd来加月
山寨DBA 2013-12-27
  • 打赏
  • 举报
回复
在给你一些,直接执行看看效果就知道了
select datepart(YY,GETDATE())--年
    ,DATEPART(MM,GETDATE())--月
    ,datepart(dd,GETDATE())--日
    ,getdate()--整体
白云任去留 2013-12-27
  • 打赏
  • 举报
回复
你查询要得到怎样一个形式呢?
山寨DBA 2013-12-27
  • 打赏
  • 举报
回复
用datepart函数

select datepart(YY,GETDATE())--年
	,DATEPART(MM,GETDATE()),--月
	GETDATE()--日
/*结果
2013	12	2013-12-27 11:08:39.103
*/
orochiheart 2013-12-27
  • 打赏
  • 举报
回复
说啥呢
棉花棒棒糖 2013-12-27
  • 打赏
  • 举报
回复
可以结贴了,感谢各位达人!
棉花棒棒糖 2013-12-27
  • 打赏
  • 举报
回复
select case when DATEPART(day,d) >=26 and DATEPART(month,d)< 12 then datepart(year,DATEADD(month,1,d)) --加1个月,然后取出月份 else DATEPART(year,d) --直接取出月份 end '年', case when DATEPART(day,d) >=26 and DATEPART(month,d)< 12 then datepart(month,DATEADD(month,1,d)) --加1个月,然后取出月份 else DATEPART(MONTH,d) --直接取出月份 end '月', d as '日' from ( select '2013-11-24' as d union all select '2013-11-25' union all select '2013-11-26' union all select '2013-12-25' union all select '2013-12-26'union all select '2013-12-31' )d
加载更多回复(2)

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧