1、日期和时间数据类型

(1)在sqlserver 2008之前,SQL Server 支持datetime 和 smalldatetime 两种日期时间数据类型、这两种数据类型日期和时间是不可分割的、差异在日期范围、精度方面

(2)sql server 2008引入date 和 time 、datetime2、datetimeoffset数据类型、其中datetime2比date范围更大,精度更高、datetimeoffset 有一个时间偏移量组件

(3)datetime 精确到毫秒,time 和 datetime 精确到100纳秒

(4)time 、datetime2 、datetimeoffset 的存储需求取决于精度、以整数 0~7 表示秒的小数部分的精度、如TIME(0),表示小数部分为0位,精确到秒,TIME(3)表示精确到毫秒

2、日期和时间常量

(1)日期和时间常量,说白了就是日期时间类型的文本值,如orderdate = '20070212'

(2) Sql server将 文本‘20070212’ 识别为字符串常量、而不是日期和时间常量,但是由于 orderdate = '20070212' 涉及两种类型的操作数、所以必须有一个隐式转换,类型转换的方向基于数据类型的优先级、日期类型优先级高于字符串

(3)此外也可以进行显式转换

cast('' as datetime)

(4)日期格式与语言有关系,如中英文日期格式不同,sql server 将日期字符串转换成日期时,基于会话的有效语言转换

(5)convert(datetime, '02/12/2007' ,101)显式转换字符串常量,第3个参数中指定一个代表所使用格式的数字、网上有编码与格式的映射表格(The Cast and  Convert Functions)

3、日期筛选的优化细节

(1)使用日期函数 year 、month 是无法使用索引的

-- 以下sql 无法使用到索引
select orderid ,custid ,empid ,orderdate
from Sales.Orders
where year(orderdate) = 2007;

(2)应该使用以下方案替代

select orderid ,custid ,empid, orderdate
from Sales.Orders
where orderdate>= ''
and orderdate < ''

4、日期与事件函数

4.1 返回当前日期和时间

(1)getdate()   , 返回datetime类型、当前日期时间

(2)current_timestamp , 等价于getdate() ,返回值是datetime ,不用带括号,是标准ANSI SQL,推荐使用

(3) sysdatetime 返回的是datetime2

4.2指定格式字符串转换成日期

4.2.1 cast 、convert 、parse 、try_

(1)cast(value as datatype) 、convert(datetyepe,vulue,stylenumber)、parse( value as datatype using culture)

(2)cast convert parse 函数当源数据无法转换成日期会报错,如果加了try_前缀 函数返回null ,不会报错

(3)cast 是ANSI SQL,convert 和parse 不是,所以除非需要使用到样式编码或趋于编码,尽量使用Cast

(4) convert 和其他两个参数不一样、第一个参数是dateype ,第二步才是value,

(5)convert 既可以将字符串转时间,也可以将时间转成指定字符串

-- 字符串转时间
select convert(datetime, '02/12/2007' ,101) -- 时间转字符串,一下返回当前年月日'20190406'
select convert(char(8),current_timestamp,112)

4.2.2 dateadd 函数

(1)该函数用于为指定日期部分增加一个指定的单位数量到输入的日期时间值总

(2)语法 dateadd(part, n, dt_val)

(3)   part 的有效输入值有 year、 quarter 、month 、week 、day 、hour 、minute、 second 、second  等,更多的参阅SQL Server 联机丛书

-- 加一年
select dateadd(year,1,'')

4.2.3 datediff函数

(1) datediff 函数返回两个日期和时间值之间在指定日期部分的差异

-- 计算一下两个日期相差多少天,返回366天
select datediff(day,'','')

(2)part 和前面一样

(3)是后面的日期,减去前面的日期

4.2.4 datepart函数

(1) datepart 返回一个表示所请求日期或时间值部分的整数

--  返回2
datepart(month,'')

(2) year(dt_val) 、month(dt_val) 、day(dt_val) 实际是datepart 的缩写

4.2.5 isdate函数

isdate(str)  ,字符串能转换成时间返回1 ,不能返回0

4.2.6 fromparts 函数

(1)在sqlserver 2012 引入,用于接收各个部分的整数值构建对应类型

(2)格式

datefromparts(year,month,day)

datetimefromparts(year,month, day, minute, seconds,millisseconds)

4.2.7 eomonth

(1)sqlserver 2012 中引入、用户接受一个日期和时间值输入,返回月末午夜日期

-- 返回当月月末日期
select eomonth(current_timestamp)

(2) 第二个参数可选,指示在原来的基础上增加多少个月

--下个月的最后一天

select eomonth(current_timestamp,1)

sql server 日期时间数据类型的更多相关文章

  1. sql server日期时间转字符串

    一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基 ...

  2. SQL Server日期时间格式转换字符串详解 (详询请加qq:2085920154)

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  3. SQL Server日期时间格式转换字符串

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  4. sql server日期时间转字符串(转)

    一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基 ...

  5. SQL Server日期时间格式转换字符串详解

    本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...

  6. sql server 日期时间与字符串的转换

    一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基 ...

  7. (后端)SQL Server日期时间函数

    转自博客园: 1.获取当前日期GetDate getdate()函数以datetime数据类型的格式返回当前SQLServer服务器所在计算机的日期和时间.其语法格式为getdate().返回值舍入到 ...

  8. Sql Server 日期时间格式转换

    日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02 CONVERT(varchar(10), 时间一, 23) 结果:2 ...

  9. sql server日期时间函数

    From:http://www.cnblogs.com/linzheng/archive/2010/11/17/1880208.html 1.  当前系统日期.时间  select getdate() ...

随机推荐

  1. Day10 - D - 矿场搭建 HYSBZ - 2730

    煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖 ...

  2. 「NOIP2017」列队

    传送门 Luogu 解题思路 一眼平衡树,应该没问题吧? 但我们一定要反应过来,单点的维护是非常之困难的,因为这是一个网格图而不仅仅是一条序列. 我们要考虑把修改操作全都放在序列上进行. 其实题面里是 ...

  3. MyBatis Dao层的编写

    传统的dao层编写 以前编写dao层,先新建一个包com.chy.dao,再写接口StudentDao: public interface StudentDao { public void inser ...

  4. spark on yarn container分配极端倾斜

    环境:CDH5.13.3  spark2.3 在提交任务之后,发现executor运行少量几台nodemanager,而其他nodemanager没有executor分配. 测试环境通过spark-s ...

  5. poj1703 Find them, Catch them(种类并查集

    题目地址:http://poj.org/problem?id=1703 题目大意:警察抓了n个坏蛋,这些坏蛋分别属于龙帮或蛇帮.输入m个语句,A x y询问x和y的关系(在一个帮派,不在,不能确定), ...

  6. leetcode841 Keys and Rooms

    """ There are N rooms and you start in room 0. Each room has a distinct number in 0, ...

  7. P1060 爱丁顿数

    P1060 爱丁顿数 转跳点:

  8. 多个Activity跳转的小结

    第一个例子:demo1 Main—>SecondActivity—>Main 从流程上看就是从Main跳转到SecondActivity,再从SecondActivity返回到Main.也 ...

  9. Windows下使用Tomcat

    tomcat简介 Tomcat是一个开源.免费.轻量级的web服务器,只支持部分JavaEE规范(Servlet.JSP),适合部署中小型.并发访问量不大的web项目,是部署中小型Java Web项目 ...

  10. wincc的服务器-客户机模式具体做法(全抄-未测试)

    一.原来的工作方式:在同一工作组中4台计算机其windows名分别为A.B.C.D且都已安装好wincc5.0+sp2,原来在每台计算机上运行的均是单用户,4台计算机上实际运行的是一个相同的项目,最先 ...