日期如何提取?

yuzhifu1 2010-04-06 03:34:12
日期
2001-1-1
2001-1-22
2001-1-23
2001-1-25
2001-2-5
2001-2-23
2001-12-23

如何变成:
年 月
2001 1
2001 1
2001 2
2001 2
2001 2
2001 3
2002 1

我的账期截止到每月22日,不是自然月,如果要实现以上结果,请问SQL语句怎么写?谢谢!!!
...全文
99 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
yuzhifu1 2010-04-06
  • 打赏
  • 举报
回复
谢谢楼上各位!
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
精简一下
DECLARE @a table(s DATETIME)
insert @a select '2001-1-1'
union all select '2001-1-22'
union all select '2001-1-23'
union all select '2001-1-25'
union all select '2001-2-5'
union all select '2001-2-23'
union all select '2001-12-23'

SELECT convert(varchar(7),dateadd(mm,CASE WHEN datepart(dd,s)>22 THEN 1 ELSE 0 end,s),120)
FROM @a

--result
/*-------
2001-01
2001-01
2001-02
2001-02
2001-02
2001-03
2002-01

(所影响的行数为 7 行)
*/
chuifengde 2010-04-06
  • 打赏
  • 举报
回复
DECLARE @a table(s DATETIME)
insert @a select '2001-1-1'
union all select '2001-1-22'
union all select '2001-1-23'
union all select '2001-1-25'
union all select '2001-2-5'
union all select '2001-2-23'
union all select '2001-12-23'



SELECT CASE WHEN datepart(dd,s)>22 THEN convert(varchar(7),dateadd(mm,1,s),120)
ELSE convert(varchar(7),s,120) END FROM @a

--result
/*-------
2001-01
2001-01
2001-02
2001-02
2001-02
2001-03
2002-01

(所影响的行数为 7 行)
*/
dawugui 2010-04-06
  • 打赏
  • 举报
回复
create table tb(riqi datetime)
insert into tb values('2001-1-1')
insert into tb values('2001-1-22')
insert into tb values('2001-1-23')
insert into tb values('2001-1-25')
insert into tb values('2001-2-5')
insert into tb values('2001-2-23')
insert into tb values('2001-12-23')
go

select case when datepart(dd,riqi) > 22 then year(dateadd(mm,1,riqi)) else year(riqi) end 年 ,
case when datepart(dd,riqi) > 22 then month(dateadd(mm,1,riqi)) else month(riqi) end 月
from tb

drop table tb

/*
年 月
----------- -----------
2001 1
2001 1
2001 2
2001 2
2001 2
2001 3
2002 1

(所影响的行数为 7 行)


*/
jiangshun 2010-04-06
  • 打赏
  • 举报
回复
select Y=year(日期),M=month(日期) from 日期 where day(日期)<23
dawugui 2010-04-06
  • 打赏
  • 举报
回复

select case when datepart(dd,riqi) > 22 then year(datediff(mm,1,日期)) else year(日期) end 年 ,
case when datepart(dd,riqi) > 22 then month(datediff(mm,1,日期)) else month(日期) end 月
from tb
bancxc 2010-04-06
  • 打赏
  • 举报
回复
select year(getdate()),month(getdate())


----------- -----------
2010 4

(1 行受影响)
bancxc 2010-04-06
  • 打赏
  • 举报
回复
year()
month()

34,575

社区成员

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

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