SqlServer中关于时间函数的应用

来源:互联网 发布:java lambda有啥好 编辑:程序博客网 时间:2024/05/18 03:54
文章来源:胡同的小窝

SqlServer中关于时间函数的应用

SqlServer中关于时间函数的应用

通常在开发数据库应用中,都会涉及到与时间日期相关的查询操作的,
下面就这些常见的问题,总结一下。

首先介绍一下,在SQL Server中处理时间的函数比较常用就这下面几个,熟悉了这些时间函数的使用,
会使你在以后相关的时间日期查询中得心应手滴:

getdate()函数:     取得系统当前的日期和时间,返回datetime类型值
year()函数:        取指定时间的年份值,返回整数值
month()函数:       取指定时间的月份值,返回整数值
day()函数:         取指定时间的日期值,返回整数值
datepart()函数:    以整数的形式返回时间的指定部分(年,月,日等)。
dateadd()函数:    通过给指定的时间的指定部分加上一个整数值以返回一个新时间值。
datediff()函数:    返回两个时间以指定时间部分来计算的差值,返回整数值

下面是一些时间缩写符号的意义和取值范围

yy 1753-9999 年份

qq 1-4 刻

mm 1-12 月

dy 1-366 日

dd 1-31 日

wk 1-54 周

dw 1-7 周几

hh 0-23 小时

mi 0-59 分钟

ss 0-59 秒

ms 0-999 毫秒

下面分别用例子说说上面的函数用法:


getdate()函数: 取得系统当前的日期和时间,返回datetime类型值
用法:getdate()
例子: 输出当前时间日期
select getdate() as now
输出结果:
now
2006-08-04 10:11:59.253
(1 row(s) affected)


year(),month(),day()函数:
用法:year(param),month(param),day(param)
参数说明:所有参数param都是个时间日期值
上面三个函数用法都很相似
我举一个例子:输入当前年份值
select year(getdate()) as [now year]
输出结果:
now year
2006
(1 row(s) affected)


datepart()函数:以整数的形式返回时间的指定部分(年,月,日等)。
用法:datepart(datepart,date)
参数说明:datepart时要返回的时间的部分,常用取值year、month、day、hour、minute。
date是所指定的时间。
例子:
SELECT DATEPART(month, GETDATE()) AS [month]
输出结果:
Month
8
(1 row(s) affected)


dateadd()函数:通过给指定的时间的指定部分加上一个整数值以返回一个新时间值。
用法:dateadd(datepart,number,date)
参数说明:datepart(同上)
date(同上)
number要增加的值,整型,可正可负,正值返回date之后的时间值,负值返回date
之前的时间值
例子:
select getdate() as [today]
select dateadd(day,-1,getdate())   as [yesterday]
select dateadd(day,1,getdate())   as [tomorrow]
输出:
today
1999-11-21 19:42:41.410
(1 row(s) affected)

yesterday
1999-11-20 19:42:41.410
(1 row(s) affected)

tomorrow
1999-11-22 19:42:41.410
(1 row(s) affected)


datediff()函数:返回两个时间以指定时间部分来计算的差值。返回整数值。如1991-6-12和1991-6-21之间以

天来算相差9天,1998-6-12和1999-6-23按年算相差1年,1999-12-1和1999-3-12按月算相差9个月
用法:datediff(darepart,date1,date2)
参数说明:datepart(同上)
date1、date2(同上date)
例子:相差几个月
select datediff(month,'1991-6-12','1992-6-21') as [month]
输出:
month
12
(1 row(s) affected)

下面是一些特殊时间日期查询的用法总结:
1.一个月第一天的
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

2.本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

3.一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

4.季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

5.当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

6.上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

7.去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

8.本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

9.本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

10.本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

原创粉丝点击