sql按日期範圍摘要資料

來源:互聯網
上載者:User
昨天想到的按日期統計資料,後來在自己電腦上看以前當的資料時,找到解決辦法了,確實很實用。說白了,就是
只想得到日期或時間的一部分,而不是完整的日期和時間。然後在統計。

用到的資料庫和表(MS SqlServer資料庫)
use master
go

if exists(select * from sysdatabases where name='Spending')
drop database Spending

create database Spending
on
(
name='Spending_data',
filename='D:\Spending_data.mdf',
size=3 mb,
filegrowth=10%
)
log on
(
name='Spending_log',
filename='D:\Spending_log.ldf',
size=3 mb,
filegrowth=10%
)
go

use Spending
go

if exists(select * from sysobjects where name='consumption')
drop table consumption
go
create table consumption
(
  cid int primary key identity(1,1),
  cdate datetime not null,
  cmoney money not null
)
go

insert into consumption values('20090624',23)
insert into consumption values('20090625',56)
insert into consumption values('20090625',42)
insert into consumption values('20090626',45)
insert into consumption values('20090627',12)
insert into consumption values('20090628',32)
insert into consumption values('20090629',36)
insert into consumption values('20090701',16)

select * from consumption

比如我想統計每天的資料和(25號時候有兩條記錄)用下面語句,只統計6月份每一天的資料和(如果年份多,再加上限制條件)

select DATEPART(dd,cdate) as '號', sum(cmoney) from consumption  where datepart(mm,cdate)=6  group by DATEPART(dd,cdate)
顯示結果
24    23.00
25    98.00
26    45.00
、、、

統計一周的如下

select DATEPART(wk,cdate) as '周', sum(cmoney) from consumption group by DATEPART(wk,cdate)
顯示結果
26    178.00
27     84.00

統計月的如下

select datepart(mm,cdate) as '月份',sum(cmoney) from consumption where datepart(yy,cdate)=2009 group by datepart(mm,cdate)

顯示結果
6    246.00
7     16.00

以上用到的就是“DATEPART()”函數。函數DATEPART()的參數是兩個變數。第一個變數指定要抽取日期的哪一部分;第二個變數是實際的資料。

日期的各部分及其簡寫
日期部分           簡寫               值
year                yy                1753--9999
quarter             qq                1--4
month               mm                1--12
day of year         dy                1--366
day                 dd                1--31
week                wk                1--53
weekday             dw                1--7(Sunday--Saturday)
hour                hh                0--23
minute              mi                0--59
second              ss                0--59
milisecond          ms                0--999

再有就是我們資料庫某欄位設計為 datetime類型後,插入資料後,自動將毫秒數都顯示出來了
例如我上面插入的是 20090624,可是在查出來就變成2009-06-24 00:00:00.000,這樣在頁面
顯示肯定有問題,這種情況可以用CONVERT()函數

CONVERT(data_type,expression,[style])

此樣式一般在時間類型(datetime,smalldatetime)與字串類型(nchar,nvarchar,char,varchar)
相互轉換的時候才用到.

語句及查詢結果:
SELECT CONVERT(varchar(100), cdate, 0):24 06 2009 21:57PM
SELECT CONVERT(varchar(100), cdate, 1): 06/24/09
SELECT CONVERT(varchar(100), cdate, 2): 09.06.24
SELECT CONVERT(varchar(100), cdate, 3): 24/06/09
SELECT CONVERT(varchar(100), cdate, 4): 24.06.09
SELECT CONVERT(varchar(100), cdate, 5): 24-06-09
SELECT CONVERT(varchar(100), cdate, 6): 24 06 09
SELECT CONVERT(varchar(100), cdate, 7): 06 24, 09
SELECT CONVERT(varchar(100), cdate,: 10:57:46
SELECT CONVERT(varchar(100), cdate, 9): 06 24 2009 21:57:46:827AM
SELECT CONVERT(varchar(100), cdate, 10): 06-24-09
SELECT CONVERT(varchar(100), cdate, 11): 09/06/24
SELECT CONVERT(varchar(100), cdate, 12): 090624
SELECT CONVERT(varchar(100), cdate, 13): 24 06 2009 21:57:46:937
SELECT CONVERT(varchar(100), cdate, 14): 10:57:46:967
SELECT CONVERT(varchar(100), cdate, 20): 2009-06-24 21:57:47
SELECT CONVERT(varchar(100), cdate, 21): 2009-06-24 21:57:47.157
SELECT CONVERT(varchar(100), cdate, 22): 06/24/09 21:57:47 PM
SELECT CONVERT(varchar(100), cdate, 23): 2009-06-24
SELECT CONVERT(varchar(100), cdate, 24): 10:57:47
SELECT CONVERT(varchar(100), cdate, 25): 2009-06-24 21:57:47.250
SELECT CONVERT(varchar(100), cdate, 100): 06 24 2009 21:57PM
SELECT CONVERT(varchar(100), cdate, 101): 06/24/2009
SELECT CONVERT(varchar(100), cdate, 102): 2009.06.24
SELECT CONVERT(varchar(100), cdate, 103): 24/06/2009
SELECT CONVERT(varchar(100), cdate, 104): 24.06.2009
SELECT CONVERT(varchar(100), cdate, 105): 24-06-2009
SELECT CONVERT(varchar(100), cdate, 106): 24 06 2009
SELECT CONVERT(varchar(100), cdate, 107): 06 24, 2009
SELECT CONVERT(varchar(100), cdate, 108): 10:57:49
SELECT CONVERT(varchar(100), cdate, 109): 06 24 2009 21:57:49:437PM
SELECT CONVERT(varchar(100), cdate, 110): 06-24-2009
SELECT CONVERT(varchar(100), cdate, 111): 2009/06/24
SELECT CONVERT(varchar(100), cdate, 112): 20090624
SELECT CONVERT(varchar(100), cdate, 113): 24 06 2009 21:57:49:513
SELECT CONVERT(varchar(100), cdate, 114): 10:57:49:547
SELECT CONVERT(varchar(100), cdate, 120): 2009-06-24 21:57:49

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.