SQL应用之时间函数篇

关于SQL基础,我不想多谈,因为这本就不是给初学者学习的,只是写下自己的心得体会

1.时间基础数据

 函数:DAY(日期),MONTH(日期),YEAR(日期)  返回对应参数的值

SELECT DAY('2016-02-01'):1

SELECT MONTH('2016-02-01'):2

SELECT YEAR('2016-02-01'):2016

2.时间格式化函数

函数:CONVERT(类型,时间,参数)

关于时间格式化,对于自己参数我一般只用 120,基本上能吃遍天

SELECT CONVERT(varchar(50), GETDATE(), 120): 2006-05-16 10:57:49

SELECT CONVERT(varchar(10), GETDATE(), 120): 2006-05-16

根据长度可以调节获取的量

当然如果你想要其它的格式化,恐怕只能去其它博客寻找了

3.时间差函数

函数:DATEDIFF(时间单位,时间1,时间2),根据时间单位计算时间2比时间1大多少个单位

时间单位:day 日,year 年,month 月,s 秒 等

SELECT DATEDIFF(DAY,'2016-1-1','2016-1-2'): 1

4.获取新时间函数

函数:DATEADD(时间单位,值,时间),根据已知时间加上值与时间单位的乘积

SELECT DATEADD(day,1,'2016-1-1'): 2016-1-1 

函数:GETDATE()  获取服务器时间

5.变量

DECLARE
@rq  DATETIME

SELECT @rq=GETDATE()

 

all:下面我谈一下对于这几个函数的联合应用

1.根据已知时间计算当年天数 

DECLARE
@rq DATETIME,@syear DATETIME,@eyear DATETIME
SELECT @rq=GETDATE()
SELECT @syear=CONVERT(VARCHAR(4),@rq,120)+'-01-01' --计算年初
SELECT @eyear=CONVERT(VARCHAR(4),@rq,120)+'-12-31 23:59:59' --计算年末
SELECT DATEDIFF(DAY,@syear,@eyear) --计算天数

2.根据已知时间计算当月与上月的参数

DECLARE
@rq DATETIME,
@smonth DATETIME,@emonth DATETIME,
@smonthl DATETIME,@emonthl DATETIME

SELECT @rq=GETDATE()
SELECT @smonth=CONVERT(VARCHAR(7),@rq,120)+'-01' --计算月初
SELECT @smonthl=DATEADD(MONTH,-1,@smonth) --计算上月初
SELECT @emonth=DATEadd(s,-1,DATEADD(MONTH,1,@smonth)) --计算月末
SELECT @emonthl=DATEadd(s,-1,@smonth) --计算上月末

3.根据已知时间计算医保年初年末(医保年初7-1,年末6-30),其它不是整年的可以参考

DECLARE
@rq DATETIME,@syear DATETIME,@eyear DATETIME
SELECT @rq=GETDATE()
SELECT @syear=CAST(YEAR(@rq)-1+MONTH(@rq)/7 as varchar(10))+''+'-07-01' --计算年初,7月之后就不会减一
SELECT @eyear=DATEADD(S,-1,DATEADD(YEAR,1,@syear)) --计算年末

 

 几种比较常见的应用,其实计算方法很多,根据不同的函数可以组装不同的算法

posted @ 2016-08-29 15:55  特工龙井茶  阅读(123)  评论(0)    收藏  举报