SQL計算日期的筆記(日資料計算)

2022-03-05 12:13:05 字數 3281 閱讀 6086

做的乙個專案,要計算每一日的資料統計,以日雨量為例,

每個記錄的記錄時間包括了時分秒。

計算規則: 日期為8:00到8:00才為一天的資料,

假設要計算2012-03-25的雨量,則資料的日期範圍應該是 2012-03-25 08:00:00 到 2012-03-26 8:00:00之間的資料 

相到的查詢方法是 通過查詢日期範圍在開始日期和結束日期之間的資料,將日期與開始日期的8:00:00鐘開始算它們之間的小時差,根據小時差,進行分組,算日雨量之和

測試資料

create

table testtb

(id int

primary

key)

goinsert

into testtb select

'2012-03-22 08:00:00

',10

union

allselect

'2012-03-22 09:00:00

',10

union

allselect

'2012-03-22 10:02:00

',10

union

allselect

'2012-03-22 10:30:00

',10

union

allselect

'2012-03-22 11:20:00

',10

union

allselect

'2012-03-22 11:30:00

',10

union

allselect

'2012-03-22 11:40:00

',10

union

allselect

'2012-03-22 11:50:00

',10

union

allselect

'2012-03-22 15:00:00

',10

union

allselect

'2012-03-22 16:00:00

',10

union

allselect

'2012-03-22 17:00:00

',10

union

allselect

'2012-03-22 18:00:00

',10

union

allselect

'2012-03-22 19:00:00

',10

union

allselect

'2012-03-22 20:00:00

',10

union

allselect

'2012-03-22 21:00:00

',10

union

allselect

'2012-03-22 22:00:00

',10

union

allselect

'2012-03-22 23:00:00

',10

union

allselect

'2012-03-23 00:20:00

',10

union

allselect

'2012-03-23 07:20:00

',10

union

allselect

'2012-03-23 08:00:00

',50

union

allselect

'2012-03-24 09:00:00

',100

union

allselect

'2012-03-21 09:20:20

',80

union

allselect

'2012-03-23 09:20:20

',80

union

allselect

'2012-03-23 10:20:20

',80

union

allselect

'2012-03-26 10:20:20

',80

union

allselect

'2012-03-26 07:20:20

',80

查詢語句(計算2012-03-22到2012-03-26之間的日雨量)

declare

@startdate

datetime

declare

@enddate

datetime

declare

@hours

intset

@startdate='

2012-03-22 08:00:00

'set

@enddate='

2012-03-27 08:00:00

'select

@hours

=datediff(hh,@startdate,@enddate)

select

sum(rainnumber) as 總數, convert(varchar(10),(case

when

7then

dateadd(day,-

(case

when

0and

23then

1when

24and

47then

2when

48and

71then

3when

72and

95then

4when

96and

119then

5when

120and

143then

6else00

and@hours) as t group

by oneday

碰到的第一問題是:

想到的處理方法是 看這個日期的小時是否為小於等於7,如果是,則日期的天數應該減1,則這個資料日期應該歸到3月25日去

第二個問題是:

查詢的日期範圍是不固定的,所以要動態去生成這個sql語句,(通過後台**去構建)

第三個問題:

如果時間跨度很大,則這個sql語句的長度長到嚇死人(比如,跨了幾年)

測試,跨3年可以,

跨5年則 sql語句就過長了                                    --問題未解決(糾結)

計算兩個日期之間的工作日數

計算兩個日期之間的工作日數,星期6,星期天,不算工作日 dt1和dt2之間相隔多少工作日,其中dt3 dt4的時間為公休日,這裡公休日可以用以個陣列,或者從乙個xml表裡面讀取,以便扣除 要計算的起始時間 要計算的結束時間 公休起始時間 公休結束時間 intreturn private int di...

常用日期計算SQL語句

本月的第一天 select dateadd mm,datediff mm,0,getdate 0 本月的最後一天 select dateadd ms,3 dateadd mm,datediff m,0,getdate 1,0 上個月的第一天 select dateadd m,1 dateadd mm...

SQL各種日期計算方法

select dateadd mm,datediff mm,0,getdate 0 計算乙個月第一天 select dateadd wk,datediff wk,0,getdate 0 本週的星期一 select dateadd yy,datediff yy,0,getdate 0 本年的第一天 s...