数据类型 |
存储(字节) |
日期范围 | 精确度 | 格式示例 |
DateTime | 8 | 1753年1月1日 - 9999年12月31日 | 3 1/3毫秒 | yyyy-MM-dd hh:mm:ss.nnn |
smalldatetime | 4 | 1900年1月1日 - 2079年6月6日 | 1分钟 | yyyy-MM-dd hh:mm |
date | 3 | 0001年1月1日 - 9999月12月31日 | 1天 | yyyy-MM-dd |
time | 3-5 | N/A | 100纳秒 | hh:mm:ss.nnnnnnn |
DateTime2 | 6-8 | 0001年1月1日 - 9999年12月31日 | 100纳秒 | yyyy-MM-dd hh:mm:ss.nnnnnnn |
Datetimeoffset | 8-10 | 0001年1月1日 -- 9999年12月31日 | 100纳秒 | yyyy-MM-dd hh:mm:ss.nnnnnnn |
-- 1、时间和日期函数 除了CURRENT_TIMESTAMP 函数不置顶小括号"()";其他的函数都需要制定小括号
select GETDATE() --返回当前时间
select CURRENT_TIMESTAMP -- 等同于getdate(),但是遵循ANSI SQL
select GETUTCDATE() -- 返回UTC日期和时间(协调世界时 )
select SYSDATETIME() -- 当前日期和时间
select SYSUTCDATETIME() -- 当前UTC日期和时间(协调世界时)
select SYSDATETIMEOFFSET() -- 包含时区偏移量的当前日期时间
-- 2、cast、convert函数,及其Try_对应函数 TRY_函数在SQL Sever2012开始支持
-- cast、convert函数用于将输入值转换为目标类型,如果转换成功输出转换的值,否则报错;
-- try_cast、try_convert函数;两个个try_函数与其对应的函数功能作用一样,不同的是如果不能讲输入的值转换为指定类型,函数返回NULL.
select CAST(‘20160628‘ AS DATE)
select TRY_CAST(‘20160628‘ AS DATE)
select CAST(‘123456‘ as DATE)
select Try_CAST(‘123456‘ as DATE)
select CONVERT(char(10),GETDATE(),120)
select Try_CONVERT(char(10),GETDATE(),120)
select CONVERT(int,‘123acb‘)
select Try_CONVERT(int,‘123acb‘)
-- 3、switchoffset函数将输入的datetimeoffset时间调整为指定的时区时间
select switchoffset(sysdatetimeoffset(),‘-05:00‘) --查询-05:00 时区时间
select SWITCHOFFSET(SYSDATETIMEOFFSET(),‘+00:00‘) --查询UTC时间
-- 4、Todatetimeoffset函数;设置输入的日期和时间值得时区偏移量
select TODATETIMEOFFSET(SYSDATETIMEOFFSET(),-10)
-- 5、DateAdd函数;允许为指定的日期部分增加一个指定的单位的单位数量到输入的日期和时间值中。
select DATEADD(YEAR,1,‘2016-06-28‘) --指定日期加1年 2017-06-28
select DATEADD(QUARTER,1,‘2016-06-28‘) --指定日期加3个月206-09-28
select DATEADD(MONTH,-1,‘2016-06-28‘) --指定日期减1个月2016-05-28
select DATEADD(DAY,1,‘2016-06-28‘) --指定日期加1天2016-06-29
select DATEADD(WEEK,1,‘2016-06-28‘) --指定日期加7天2016-07-05
select DATEADD(HOUR,1,‘2016-06-28 21:00:00.000‘) -- 指定时间加1小时 2016-06-28 22:00:00.000
select DATEADD(MINUTE,1,‘2016-06-28 21:00:00.000‘) -- 指定时间加1分钟 2016-06-28 21:01:00.000
select DATEADD(SECOND,1,‘2016-06-28 21:00:00.000‘) -- 指定时间加1秒钟 2016-06-28 21:00:01.000
select DATEADD(MILLISECOND,10,‘2016-06-28 21:00:00.000‘) --指定时间加10毫秒 2016-06-28 21:00:00.010
-- 6、DateDiff(part,val1,val2)函数;返回val2-val1返回指定单位的数量
select DateDiff(YEAR,‘2011-06-28‘,‘2017-06-28‘)
select DateDiff(QUARTER,‘2016-03-28‘,‘2016-06-28‘)
select DateDiff(MONTH,‘2016-05-28‘,‘2016-06-28‘)
select DateDiff(DAY,‘2016-06-27‘,‘2016-06-28‘)
select DateDiff(WEEK,‘2016-06-21‘,‘2016-06-28‘)
select DateDiff(HOUR,‘2016-06-28 20:00:00.000‘,‘2016-06-28 21:00:00.000‘)
select DateDiff(MINUTE,‘2016-06-28 21:01:00.000‘,‘2016-06-28 21:00:00.000‘)
select DateDiff(SECOND,‘2016-06-28 21:00:01.000‘,‘2016-06-28 21:00:00.000‘)
select DateDiff(MILLISECOND,‘2016-06-28 21:00:00.001‘,‘2016-06-28 21:00:00.000‘)
-- 7、datepart函数;返回一个日期或时间部分的整数部分;
select DATEPART(YEAR,‘2016-06-28‘)
select DATEPART(MONTH,‘2016-06-28‘)
select DATEPART(WEEK,‘2016-06-28‘)
select DATEPART(DAY,‘2016-06-28‘)
select DATEPART(HOUR,‘2016-06-28 21:01:02‘)
select DATEPART(MINUTE,‘2016-06-28 21:01:02‘)
select DATEPART(SECOND,‘2016-06-28 21:01:02‘)
select DATEPART(MILLISECOND,‘2016-06-28 21:01:02:100‘)
-- 8、year、month和day函数;和datepart函数一样;返回年、月、日期的整数
select YEAR(‘2016-06-28‘)
select month(‘2016-06-28‘)
select day(‘2016-06-28‘)
-- 9、datename函数;与datepart类似;但是返回的不是数字而是名称,根据操作系统的语言返回指定的日期名称;例如英文操作系统中 DATENAME(MONTH,‘2016-06-28‘) 返回june
select DATENAME(year,‘2016-06-28‘)
select DATENAME(MONTH,‘2016-06-28‘)
select DATENAME(DAY,‘2016-06-28‘)
select DATENAME(HOUR,‘2016-06-28 21:01:02‘)
select DATENAME(MINUTE,‘2016-06-28 21:01:02‘)
select DATENAME(SECOND,‘2016-06-28 21:01:02‘)
select DATENAME(MILLISECOND,‘2016-06-28 21:01:02:100‘)
-- 10、isdate函数;判断输入的字符串是否能转换为日期或时间;true 为1;false为0
select ISDATE(‘2016-06-28‘) --true
select ISDATE(‘2016-06-282‘) --false
select ISDATE(‘2016-06-28 21:00:00.000‘) --true
select ISDATE(‘2016-06-28 21:00:00.0000‘) --false