一、统计语句

1、--统计当前【>当天00点以后的数据】

SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111 ) = CONVERT(Nvarchar, GETDATE(), 111 )   ORDER BY dateandtime DESC

2、--统计本周

SELECT * FROM 表 WHERE datediff(week,[dateadd],getdate())= 0

3、--统计本月

SELECT * FROM 表 WHERE datediff(month,[dateadd],getdate())= 0

4、统计当前

SELECT * FROM 表 WHERE datediff(day,[dateadd],getdate())= 0
Select * From table with(nolock) Where Convert(varchar(10),[CreateTime],120) = Convert(varchar(10),getDate(),120)

二、时间函数

1、当前系统日期、时间

select getdate()

2、dateadd   在向指定日期加上一段时间的基础上,返回新的 datetime 值,例如:向日期加上2天

select dateadd(day, 2 ,'2004-10-15')   --返回:2004-10-17 00:00:00.000

3、datediff 返回跨两个指定日期的日期和时间边界数

select datediff(day,'2004-09-01','2004-09-18')    --返回:17

4、datepart 返回代表指定日期的指定日期部分的整数

SELECT DATEPART(month, '2004-10-15')   --返回 10

5、datename 返回代表指定日期的指定日期部分的字符串

SELECT datename(weekday, '2004-10-15')   --返回:星期五

6、day(), month(),year() --可以与datepart对照一下

select 当前日期=convert(varchar( 10 ),getdate(), 120 ),

select 当前时间=convert(varchar( 8 ),getdate(), 114 ),

select datename(dw,'2004-10-15')

select 本年第多少周=datename(week,'2004-10-15'),

select 今天是周几=datename(weekday,'2004-10-15')

7、求相差天数

select   datediff(day,'2004-01-01',getdate())

8、一个月第一天的

SELECT   DATEADD(mm,   DATEDIFF(mm, 0 ,getdate()), 0 )

9、本周的星期一

SELECT   DATEADD(wk,   DATEDIFF(wk, 0 ,getdate()), 0 )

select   dateadd(wk,datediff(wk, 0 ,getdate()), 6 )

10、一年的第一天

SELECT   DATEADD(yy,   DATEDIFF(yy, 0 ,getdate()), 0 )

11、季度的第一天

SELECT   DATEADD(qq,   DATEDIFF(qq, 0 ,getdate()), 0 )

12、当天的半夜

SELECT   DATEADD(dd,   DATEDIFF(dd, 0 ,getdate()), 0 )

13、上个月的最后一天

SELECT   dateadd(ms,- 3 ,DATEADD(mm,  DATEDIFF(mm, 0 ,getdate()), 0 ))

14、去年的最后一天

SELECT   dateadd(ms,- 3 ,DATEADD(yy,   DATEDIFF(yy, 0 ,getdate()), 0 ))

15、本月的最后一天

SELECT   dateadd(ms,- 3 ,DATEADD(mm,   DATEDIFF(m, 0 ,getdate())+ 1 , 0 ))

16、本年的最后一天

SELECT   dateadd(ms,- 3 ,DATEADD(yy,   DATEDIFF(yy, 0 ,getdate())+ 1 , 0 ))

17、本月的第一个星期一

select   DATEADD(wk,  DATEDIFF(wk, 0 ,dateadd(dd, 6 -datepart(day,getdate()),getdate())),

18、查询本周注册人数

select   count(*)   from   [user]

where   datediff(week,create_day- 1 ,getdate())= 0

19、上周注册人数

select   count(*)   from   [user]

where   datediff(week,create_day- 1 ,getdate())= 1

20、本月注册人数

select   count(*)   from   [user]

where   datediff(month,create_day,getdate())= 0

21、上月注册人数

select   count(*)   from   [user]

where   datediff(month,create_day,getdate())= 1

如果要效率,用一下方式

22、查询本周注册人数

select   count(*)   from   [user]

where   create_day>=dateadd(day, 2 -datepart(weekday,getdate()),convert(varchar,getdate(), 112 ))

create_day<dateadd(day, 9 -datepart(weekday,getdate()),convert(varchar,getdate(), 112 ))

23、上周注册人数

select   count(*)   from   [user]

where   create_day>=dateadd(day,- 5 -datepart(weekday,getdate()),convert(varchar,getdate(), 112 ))

create_day<dateadd(day, 2 -datepart(weekday,getdate()),convert(varchar,getdate(), 112 ))

24、本月注册人数

select   count(*)   from   [user]

where   create_day>=dateadd(day, 1 -day(getdate()),convert(varchar,getdate(), 112 ))

create_day<dateadd(month, 1 ,dateadd(day, 1 -day(getdate()),convert(varchar,getdate(), 112 )))

25、上月注册人数

select   count(*)   from   [user]

where   create_day>=dateadd(month,- 1 ,dateadd(day, 1 -day(getdate()),convert(varchar,getdate(), 112 )))

create_day<dateadd(day, 1 -day(getdate()),convert(varchar,getdate(), 112 ))

26、本周

select   count(*)   from   User

where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate())

27、上周

select   count(*)   from   User

where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <= 7

28、本月

select   count(*)   from   User

where   datepart(mm,create_day)   =   datepart(mm,getdate())

29、上月

select   count(*)   from   User

where   datepart(mm,create_day)   =   datepart(mm,getdate())   - 1

30、本周注册人数

select   count(*)   from   [User]

where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate())

31、上周注册人数

select   count(*)   from   [User]

where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <= 7

32、本月注册人数

select   count(*)   from   [User]

where   datepart(mm,create_day)   =   datepart(mm,getdate())

33、上月注册人数

select   count(*)   from   [User]

where   datepart(mm,create_day)   =   datepart(mm,getdate())   - 1

34、查询今日所有

SELECT * from feedback WHERE (DATEDIFF(d,fedtime,GETDATE())= 0 ) ORDER BY fedid DESC

month(create_day)=month(getdate())本月

month(create_day)=month(getdate())-1   上月

今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0

昨天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=1

7天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=7

30天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=30

本月的所有数据:select * from 表名 where DateDiff(mm,datetime类型字段,getdate())=0

本年的所有数据:select * from 表名 where DateDiff(yy,datetime类型字段,getdate())=0

系统函数:

access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似

1 .GetDate() 用于sql server :select GetDate()

2 .DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592

DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5

3 .DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)

DatePart('d','2005-7-25 22:56:32')返回值为 25即25号

DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天

DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年

Sql 取当天或当月的记录
表中的时间格式是这样的:2007-02-02 16:50:08.050, 如果直接和当天的时间比较,就总得不到准确数据,但是我们可以把这种格式的时间[格式化]成 2007-02-02,也就是只有年-月-日,然后把当天的时间也格式化成 年-月-日的格式.
这样,思路就出来了!
我们格式化日期要用到 Convert()这个函数,要用到3个参数,首先来格式化当天的日期,Convert(varchar(10),getDate(),120)
这样我们就可以把当天的日期格式化为: 2007-2-2,然后格式化数据库表中的日期
Convert(varchar(10),TimeFiled,120),最后我们就可以用一条Sql语句得到当天的数据了.

Select * From VIEW_CountBill Where Convert(varchar(10),[time],120) = Convert(varchar(10),getDate(),120)

Convert()函数中的各个参数的意义,第一个参数,varchar(10)是目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。第二个参数是你要转换的字段,我这里是[time]。最后一个就是格式了,这个值是可选的:20或者120都可以,它遵循的是[ODBC 规范],输入/输出样式为:yyyy-mm-dd hh:mm:ss[.fff]
具体的可以参考Sql Server的联机帮助!
======================================================
T-Sql查找表中当月的记录
思路:将要查找的时间字段用Month()函数取出其中的月份,然后再取出当前月的月份,对比就OK了

Select * From VIEW_CountBill Where Month([time]) = Month(getDate())

CONVERT() 函数----日期转换为新数据类型,以用不同的格式显示日期/时间数据

语法:CONVERT(data_type(length),data_to_be_converted,style)

参数含义:data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

日期格式样式,借以将 datetime smalldatetime 数据转换为字符数据( nchar nvarchar char varchar nchar nvarchar 数据类型);或者字符串格式样式,借以将 float real money smallmoney 数据转换为字符数据( nchar nvarchar char varchar nchar nvarchar 数据类型)。

SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

在表中,左侧的两列表示将 datetime smalldatetime 转换为字符数据的style值。给style值加 100,可获得包括世纪数位的四位年份 (yyyy)。

style值如下

不带世纪数位 (yy)带世纪数位 (yyyy)
标准
输入/输出** 0 或 100 (*) mon dd yyyy hh:miAM(或 PM)

*    默认值(style0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。
** 当转换为 datetime 时输入;当转换为字符数据时输出。
*** 专门用于 XML。对于从 datetime smalldatetime character 数据的转换,输出格式如表中所示。对于从 float money smallmoney character 数据的转换,输出等同于style2。对于从 real character 数据的转换,输出等同于style1。

重要 默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项("两位数字的截止年份"),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。

当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime smalldatetime 值进行转换时,可以通过使用适当的 char varchar 数据类型长度来截断不需要的日期部分。

=========================================================================

如果只要取yyyy-mm-dd格式时间, 就可以用 convert(nvarchar(10),field,120)
120 是格式代码,  nvarchar(10) 是指取出前10位字符.

语句及查询结果:
SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 1): 05/16/06
SELECT CONVERT(varchar(100), GETDATE(), 2): 06.05.16
SELECT CONVERT(varchar(100), GETDATE(), 3): 16/05/06
SELECT CONVERT(varchar(100), GETDATE(), 4): 16.05.06
SELECT CONVERT(varchar(100), GETDATE(), 5): 16-05-06
SELECT CONVERT(varchar(100), GETDATE(), 6): 16 05 06
SELECT CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
SELECT CONVERT(varchar(100), GETDATE(), 8): 10:57:46
SELECT CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
SELECT CONVERT(varchar(100), GETDATE(), 10): 05-16-06
SELECT CONVERT(varchar(100), GETDATE(), 11): 06/05/16
SELECT CONVERT(varchar(100), GETDATE(), 12): 060516
SELECT CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
SELECT CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
SELECT CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
SELECT CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
SELECT CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
SELECT CONVERT(varchar(100), GETDATE(), 24): 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
SELECT CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
SELECT CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
SELECT CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
SELECT CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
SELECT CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
SELECT CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
SELECT CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
SELECT CONVERT(varchar(100), GETDATE(), 108): 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
SELECT CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
SELECT CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
SELECT CONVERT(varchar(100), GETDATE(), 112): 20060516
SELECT CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
SELECT CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
SELECT CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 121): 2006

Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827

Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM

Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM