14.日期时间函数
在MSSQLServer中可以用字符串来表示日期时间类型,数据库系统会自动在内部将它们转换为日期时间类型,比如“'2008-08-08'”、“2008-08-08 08:00:00”、“08:00:00” 、“2008-08-08 08:00:00.000000”等。
1.日期、时间、日期时间、时间戳
Date:日期是用来表示“年-月-日”信息的数据类型,其精度精确到“日”,其中包含了年、月、日三个信息,比如“2008-08-08”。
时间是用来表示“小时:分:秒” 信息的数据类型,其精度精确到“秒”,其中包含了小时、分、秒三个信息,比如“19:00:00”。
DateTime:日期时间是用来表示“年-月-日 小时:分:秒” 信息的数据类型,其精度精确到“秒”,其中包含了年、月、日、小时、分、秒六个信息,比如“2008-08-08 08:00:00”。
TimeSpan:日期时间的精度精确到“秒”,这在一些情况下能够满足基本的要求,但是对于精度要求更加高的日期时间信息则无法表示。数据库中提供了时间戳类型用于表示这些对精度要求更加高的场合。时间戳类型还可以用于标记表中数据的版本信息,比如我们想区分表中两条记录插入表中的先后顺序,由于数据库操作速度非常快,如果用DateTime类型记输入插入时间的话,若两条记录插入的时间间隔非常短的话是无法区分它们的,这时就可以使用时间戳类型。在有的数据库系统中,如果对数据表中的记录进行了更新的话,数据库系统会自动更新其中的时间戳字段的值。
2.取得当前日期时间 :GateDate()
select getdate() as 当前日期时间
3.日期增减 :DateAdd()
DateAdd() 函数在日期中添加或减去指定的时间间隔。DateAdd(datepart,number,date)。
datepart 参数可以是下列的值:
number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
date 参数是合法的日期表达式。
select dateadd(d,2,getdate()) as 后天此刻
4.计算一个日期是星期几:DateName()
DateName有两个参数:datepart,date。其中datepart于DateAdd一样,只不过DateAdd用于对日期的某个部分(part)进行操作,而DateName是进行获取。
select datename(yyyy,getdate()) as 年,datename(m,getdate()) as 月,datename(d,getdate()) as 日
如果使用Weekday(或者使用别名dw)做为datepart参数调用DATENAME()函数就可以得到一个日期是星期几。
select datename(dw,getdate()) as 星期--结果:星期二
可见这个函数可以返回一个日期的特定部分,并且尽量用名称来表述这个特定部分。
5.取得日期的指定部分:DatePart()
DatePart (datepart,date):参数datepart指定要返回的日期部分的参数,同上。其中参数date为待计算日期,date 参数也可以是日期格式的字符串。
粗看起来,DATEPART()函数和DATENAME()函数完全一样,不过其实它们并不是只是名称不同的别名函数,虽然都是用来提取日期的特定部分的,不过DATEPART()函数的返回值是数字而DATENAME()函数则会将尽可能的以名称的方式做为返回值。
select datename(dw,getdate()) as 星期--结果:星期二 select datepart(dw,getdate()) as 星期--3
结果不同,因为周日是一个星期的第一天。
6.DateDiff() 函数返回两个日期之间的差值
语法:
DATEDIFF(datepart,startdate,enddate)
其中datepart同上,startdate为开始时间,enddate为结束时间。startdate可以大于enddate.
SELECT datediff(yy,'2000-1-1','2010-1-1') AS DiffYear, datediff(m,'2000-1-1','2010-1-1') AS DiffMonth, datediff(dd,'2000-1-1','2010-1-1') AS DiffDate
7.day(), month(),year()
SELECT day(getdate()), month(getdate()), year(getdate())
8.使用Convert()取得DateTime格式数据
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-05-16 10:57:49.700 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
9.当月的第一天
select dateadd(mm,datediff(mm,0,getdate()),0)
0表示:“1900-01-01 00:00:00.000”。datediff(mm,0,getdate())可以得到当前日期到“1900-01-01 00:00:00.000”直接相差的月份。然后用“1900-01-01 00:00:00.000”这个时间+相差的月份。就可以得到当前月的第一天。
10.本周的星期一
select dateadd(wk,datediff(wk,0,getdate()),0)
11.一年的第一天
select dateadd(yy,datediff(yy,0,getdate()),0)
12.当天的半夜
select dateadd(dd,datediff(dd,0,getdate()),0)
13.本月最后一天
select dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
14.本月的第一个星期一
select dateadd(wk,datediff(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0)
15.某月的天数
select datediff(day,'2003-2-15','2003-3-15')
select day(dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)))
16.判断是否是润年
select case day(dateadd(mm,2,dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0)))) when 28 then '平年' else '闰年' end select case datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01')) when 28 then '平年' else '闰年' end