今天有個需求是這樣的,要查出本月的工作日之和,在網上搜尋了一下,發現看起來最簡單的是這樣的:
1declare
@day date,@count
int2
set@day
=convert(varchar(10),dateadd(dd, -
datepart(dd,getdate())+
1,getdate()), 23)3
set@count=0
4while
@day
<=
convert(varchar(100), getdate(),23)5
begin
6set
@count
=@count+(
7case
datepart(weekday,@day) when
1then08
when
7then09
else110
end)
11set
@day
=dateadd(day,1,@day)12
end13
select
@count
簡單看了看,覺得有些地方可以優化下,之前有過查詢兩個時間段內所有日期的列表的經驗,所以做了一些改動,現一句話就可以查出:
1select
sum(
2case
when
datepart(weekday,dateadd(dd,number,'
2016.10.01
' )) in (1,7) then
0else
1end) as
workday
3from
master..spt_values
4where type='p
'and
dateadd(dd,number,'
2016.10.01
')<=
'2016.10.18
'
這裡是只查詢非週六週日的,如果想要節假日等,可以自己修改下,達到一樣的效果。
ps:查詢兩個時間段內所有日期的列表
1select
dateadd(dd,number,'
2016.10.01')
2from
master..spt_values
3where type='p
'and
dateadd(dd,number,'
2016.10.01
')<=
'2016.10.18
'
這裡用了乙個小技巧,利用系統表 master..spt_values 裡自帶的增長集合,來做 dateadd 的運算。
個人經驗,分享下,第一次寫部落格,歡迎交流~
sql查詢時間段區間統計
寫好這個sql,竟然發現不知道現在是上午還是下午。看來我真是埋頭寫了乙個多小時沒有分散注意力了。呵呵。寫在部落格記錄一下!需求 按天統計巡檢的基站數量。建表sql create table plan vp stat patrol detail tid varchar2 40 not null,pat...
SQL查詢時間段內月 周 日明細
查詢以下時間段內分別有幾月 時間段 2019 1 1 到 2019 7 24 select number as wknum from master.spt values where type p and number datepart mm,2019 1 1 and number datepart ...
mysql查詢時間段內資料
今天 select from 表名 where to days 時間欄位名 to days now 昨天select from 表名 where to days now to days 時間欄位名 1 近7天select from 表名 where date sub curdate interval...