求一条生成一个月排班的SQL语句,谢谢

海里猿人 2014-01-08 06:53:35
比如说该月,每星期一到星期五上班,每星期六日休息,如果用SQL语句生成这一个月的上班表,
...全文
411 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
t101lian 2014-01-09
  • 打赏
  • 举报
回复

--查询当月上班表
;with ct as
(
select Convert(varchar,dateadd(dd,number,Convert(varchar,Convert(varchar(7),getdate(),23))+'-01'),23)'日期'
 from master.dbo.spt_values where type='p' and 
number < datediff(dd,Convert(varchar,Convert(varchar(7),getdate(),23))+'-01',
Convert(varchar,Convert(varchar(7),dateadd(m,1,getdate()),23))+'-01')
)
select *,
case datepart(dw,日期) when 1 then '星期日'
                       when 2 then '星期一'
                        when 3 then '星期二'
                         when 4 then '星期三'
                           when 5 then '星期四'
                             when 6 then '星期五'
                             else  '星期六' end '星期',
case  when datepart(dw,日期)<7 and
datepart(dw,日期)>1 then '工作' else '放假' end '安排'
 from ct
--查询结果
日期                             星期     安排
------------------------------ ------ ----
2014-01-01                     星期三    工作
2014-01-02                     星期四    工作
2014-01-03                     星期五    工作
2014-01-04                     星期六    放假
2014-01-05                     星期日    放假
2014-01-06                     星期一    工作
2014-01-07                     星期二    工作
2014-01-08                     星期三    工作
2014-01-09                     星期四    工作
2014-01-10                     星期五    工作
2014-01-11                     星期六    放假
2014-01-12                     星期日    放假
2014-01-13                     星期一    工作
2014-01-14                     星期二    工作
2014-01-15                     星期三    工作
2014-01-16                     星期四    工作
2014-01-17                     星期五    工作
2014-01-18                     星期六    放假
2014-01-19                     星期日    放假
2014-01-20                     星期一    工作
2014-01-21                     星期二    工作
2014-01-22                     星期三    工作
2014-01-23                     星期四    工作
2014-01-24                     星期五    工作
2014-01-25                     星期六    放假
2014-01-26                     星期日    放假
2014-01-27                     星期一    工作
2014-01-28                     星期二    工作
2014-01-29                     星期三    工作
2014-01-30                     星期四    工作
2014-01-31                     星期五    工作

(31 行受影响)
t101lian 2014-01-09
  • 打赏
  • 举报
回复
select Convert(varchar(12),dateadd(dd,number,'2014-01-01'),111)'日期',
case  when datepart(dw,dateadd(dd,number,'2014-01-01'))<7 and
datepart(dw,dateadd(dd,number,'2014-01-01'))>1 then '工作' else '放假' end '安排'
 from master.dbo.spt_values where type='p' and 
number < datediff(dd,'2014-01-01','2014-02-01')
---查询结果
日期           安排
------------ ----
2014/01/01   工作
2014/01/02   工作
2014/01/03   工作
2014/01/04   放假
2014/01/05   放假
2014/01/06   工作
2014/01/07   工作
2014/01/08   工作
2014/01/09   工作
2014/01/10   工作
2014/01/11   放假
2014/01/12   放假
2014/01/13   工作
2014/01/14   工作
2014/01/15   工作
2014/01/16   工作
2014/01/17   工作
2014/01/18   放假
2014/01/19   放假
2014/01/20   工作
2014/01/21   工作
2014/01/22   工作
2014/01/23   工作
2014/01/24   工作
2014/01/25   放假
2014/01/26   放假
2014/01/27   工作
2014/01/28   工作
2014/01/29   工作
2014/01/30   工作
2014/01/31   工作

(31 行受影响)
唐诗三百首 2014-01-09
  • 打赏
  • 举报
回复

with t as
(select dateadd(d,number,stuff(convert(varchar,getdate(),23),9,2,'01')) 'd'
  from master.dbo.spt_values
  where type='P' and
  datediff(m,
           stuff(convert(varchar,getdate(),23),9,2,'01'),
           dateadd(d,number,stuff(convert(varchar,getdate(),23),9,2,'01')))=0)
select convert(varchar(20),d,23) 'd',
       case datepart(dw,d) when 1 then '星期日'
                           when 2 then '星期一'
                           when 3 then '星期二'
                           when 4 then '星期三'
                           when 5 then '星期四'
                           when 6 then '星期五'
                           when 7 then '星期六' end 'w',
       case when datepart(dw,d) in(1,7) then '休息'
            when datepart(dw,d) in(2,3,4,5,6) then '上班' end 'x'
 from t

/*
d                    w          x
-------------------- ---------- ----------
2014-01-01           星期三        上班
2014-01-02           星期四        上班
2014-01-03           星期五        上班
2014-01-04           星期六        休息
2014-01-05           星期日        休息
2014-01-06           星期一        上班
2014-01-07           星期二        上班
2014-01-08           星期三        上班
2014-01-09           星期四        上班
2014-01-10           星期五        上班
2014-01-11           星期六        休息
2014-01-12           星期日        休息
2014-01-13           星期一        上班
2014-01-14           星期二        上班
2014-01-15           星期三        上班
2014-01-16           星期四        上班
2014-01-17           星期五        上班
2014-01-18           星期六        休息
2014-01-19           星期日        休息
2014-01-20           星期一        上班
2014-01-21           星期二        上班
2014-01-22           星期三        上班
2014-01-23           星期四        上班
2014-01-24           星期五        上班
2014-01-25           星期六        休息
2014-01-26           星期日        休息
2014-01-27           星期一        上班
2014-01-28           星期二        上班
2014-01-29           星期三        上班
2014-01-30           星期四        上班
2014-01-31           星期五        上班

(31 row(s) affected)
*/
lzw_0736 2014-01-09
  • 打赏
  • 举报
回复

DECLARE @ym CHAR(6)
SET @ym='201401'
;WITH a1 AS
(
	SELECT CAST(@ym+'01' AS DATETIME) date_d
	UNION ALL
	SELECT DATEADD(d,1,date_d) FROM a1
	WHERE CONVERT(CHAR(6),DATEADD(d,1,date_d),112)=@ym
)
,a2 AS
(
SELECT *,DATEPART(weekday,date_d) week_day
FROM a1
)
SELECT *,CASE WHEN week_day IN (1,7) then '休息' else '上班' end 
FROM a2
發糞塗牆 2014-01-09
  • 打赏
  • 举报
回复
生成两个日期之间的工作日http://blog.csdn.net/maco_wang/article/details/6262156
tcmakebest 2014-01-08
  • 打赏
  • 举报
回复
异曲同工:
declare @month datetime = '2014-1-1'
declare @days int
set @month = DATEADD(day, 1-datepart(day, @month), @month)
set @days = DATEDIFF(day, @month, dateadd(MONTH, 1, @month))
;
with day as (
select DATEADD(day,number,@month) date,DATEPART(weekday, DATEADD(day,number,@month)) week  from master..spt_values where type='P' and number<@days 
)
select date, case when week=1 or week=7 then '休息' else '上班' end from day
giftzheng 2014-01-08
  • 打赏
  • 举报
回复

select DATEADD(day,number,convert(varchar(7),GETDATE(),120)+'-01') as a,
case when DATEPART(WEEKDAY,DATEADD(day,number,convert(varchar(7),GETDATE(),120)+'-01')) not in (1,7) then '上班'
else '放假' end as 安排
from master.dbo.spt_values
where type='p' 
其它法定假期得另算

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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