SQL Server 的时间函数

2019-07-03 11:04:37 浏览数 (1)

老规矩,先上实例,最后是语法。

一、统计语句

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

代码语言:javascript复制
SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111)   ORDER BY dateandtime DESC

2、--统计本周

代码语言:javascript复制
SELECT * FROM 表 WHERE datediff(week,[dateadd/列名],getdate())=0

3、--统计本月

代码语言:javascript复制
SELECT * FROM 表 WHERE datediff(month,[dateadd
代码语言:javascript复制
/列名],getdate())=0

4、统计当前

代码语言:javascript复制
SELECT * FROM 表 WHERE datediff(day,[dateadd
代码语言:javascript复制
/列名],getdate())=0
代码语言:javascript复制
Select * From table with(nolock) Where Convert(varchar(10),[CreateTime],120) = Convert(varchar(10),getDate(),120)

二、时间函数

1、当前系统日期、时间

代码语言:javascript复制
select getdate() 

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

代码语言:javascript复制
select dateadd(day,2,'2004-10-15')   --返回:2004-10-17 00:00:00.000

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

代码语言:javascript复制
select datediff(day,'2004-09-01','2004-09-18')    --返回:17

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

代码语言:javascript复制
SELECT DATEPART(month, '2004-10-15')   --返回 10

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

代码语言:javascript复制
SELECT datename(weekday, '2004-10-15')   --返回:星期五

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

代码语言:javascript复制
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、求相差天数

代码语言:javascript复制
select   datediff(day,'2004-01-01',getdate()) 

8、一个月第一天的

代码语言:javascript复制
SELECT   DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0) 

9、本周的星期一

代码语言:javascript复制
SELECT   DATEADD(wk,   DATEDIFF(wk,0,getdate()),   0)  select   dateadd(wk,datediff(wk,0,getdate()),6)  

10、一年的第一天

代码语言:javascript复制
SELECT   DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)

11、季度的第一天

代码语言:javascript复制
SELECT   DATEADD(qq,   DATEDIFF(qq,0,getdate()),   0)

12、当天的半夜

代码语言:javascript复制
SELECT   DATEADD(dd,   DATEDIFF(dd,0,getdate()),   0)

13、上个月的最后一天

代码语言:javascript复制
SELECT   dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),   0))

14、去年的最后一天

代码语言:javascript复制
SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)) 

15、本月的最后一天

代码语言:javascript复制
SELECT   dateadd(ms,-3,DATEADD(mm,   DATEDIFF(m,0,getdate()) 1,   0))

16、本年的最后一天

代码语言:javascript复制
SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate()) 1,   0))

17、本月的第一个星期一

代码语言:javascript复制
select   DATEADD(wk,  DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),   0)

18、查询本周注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   datediff(week,create_day-1,getdate())=0 

19、上周注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   datediff(week,create_day-1,getdate())=1

20、本月注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   datediff(month,create_day,getdate())=0 

21、上月注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   datediff(month,create_day,getdate())=1

如果要效率,用一下方式

22、查询本周注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   create_day>=dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))  and   create_day<dateadd(day,9-datepart(weekday,getdate()),convert(varchar,getdate(),112)) 

23、上周注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   create_day>=dateadd(day,-5-datepart(weekday,getdate()),convert(varchar,getdate(),112))  and   create_day<dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112)) 

24、本月注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   create_day>=dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))  and   create_day<dateadd(month,1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))

25、上月注册人数

代码语言:javascript复制
select   count(*)   from   [user]  where   create_day>=dateadd(month,-1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))  and   create_day<dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)) 

26、本周

代码语言:javascript复制
select   count(*)   from   User  where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate()) 

27、上周

代码语言:javascript复制
select   count(*)   from   User  where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7

28、本月

代码语言:javascript复制
select   count(*)   from   User  where   datepart(mm,create_day)   =   datepart(mm,getdate()) 

29、上月

代码语言:javascript复制
select   count(*)   from   User  where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1

30、本周注册人数

代码语言:javascript复制
select   count(*)   from   [User]  where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate()) 

31、上周注册人数

代码语言:javascript复制
select   count(*)   from   [User]  where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7

32、本月注册人数

代码语言:javascript复制
select   count(*)   from   [User]  where   datepart(mm,create_day)   =   datepart(mm,getdate())

33、上月注册人数

代码语言:javascript复制
select   count(*)   from   [User]  where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1

34、查询今日所有

代码语言:javascript复制
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

系统函数:

函数

参数/功能

GetDate( )

返回系统目前的日期与时间

DateDiff (interval,date1,date2)

以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1

DateAdd (interval,number,date)

以interval指定的方式,加上number之后的日期

DatePart (interval,date)

返回日期date中,interval指定部分所对应的整数值

DateName (interval,date)

返回日期date中,interval指定部分所对应的字符串名称

其中DatePart函数的详细解释:

参数 interval的设定值:

缩写(Sql Server)

Access 和 ASP

说明

Year

Yy

yyyy

年 1753 ~ 9999

Quarter

Qq

q

季 1 ~ 4

Month

Mm

m

月1 ~ 12

Day of year

Dy

y

一年的日数,一年中的第几日 1-366

Day

Dd

d

日,1-31

Weekday

Dw

w

一周的日数,一周中的第几日 1-7

Week

Wk

ww

周,一年中的第几周 0 ~ 51

Hour

Hh

h

时0 ~ 23

Minute

Mi

n

分钟0 ~ 59

Second

Ss

s

秒 0 ~ 59

Millisecond

Ms

-

毫秒 0 ~ 999

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())

综合实例

有newcourse表如下:

答案如下:

1、SELECT cname as 课程名称,ctest as 考试时间,

DATENAME(month,ctest) AS char,

DATEPART(month,ctest) AS int

FROM newcourse

2、SELECT ctest,DATEADD(day,7,ctest) AS NEWTIME

FROM newcourse

3、SELECT cname as 课程名称,ctest as 考试时间,

GETDATE() AS CURRENTDATE,

DATEDIFF(day, ctest,GETDATE ()) AS REMAINDAY

FROM newcourse

参考文章:

https://www.cnblogs.com/zhangpengnike/p/6122588.html

0 人点赞