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. Linux下如何拷贝整个目录下的所有文件

    分类: Linux使用2014-01-14 13:38 1449人阅读 评论(0) 收藏 举报 如何在Linux下拷贝一个目录呢?这好像是再如意不过的问题了.比如要把/home/usera拷贝到/mn ...

  2. jdk环境

    安装方式一  jdk环境 干净的环境 将tar包解压到 /usr/local下 版本为jdk-8u211-linux-x64.tar.gz  路径为/usr/local/jdk1.8.0_211 /u ...

  3. 二十一 JDK注解&注解案例

    什么是注解? 注解和接口,类属于同一个级别 注解可以在变量.方法.类上加载 注解可以有属性也可以没有属性 注解是有作用范围(源码.编译期间,运行期间) 源码期间:例如String类上@Author  ...

  4. gitlab实现webhook触发jenkins 自动,构建,测试,push webhook构子 总结

    最新一直在学习 工作 + 学习 去掉 90%   所以blog  一直没更 真是很不好!  exsi ceph gitlab jenkins harbor k8s  docker-compose ap ...

  5. SQLI_LAB------level 1

    SQLI_LAB 刷题刷题刷题!!! 知识扩展: SQL 1)SQL注入介绍 SQLI,sql injection,我们称之为 sql 注入.何为 sql,英文:Structured Query La ...

  6. POJ - 1847 Tram(dijkstra)

    题意:有向图有N个点,当电车进入交叉口(某点)时,它只能在开关指向的方向离开. 如果驾驶员想要采取其他方式,他/她必须手动更换开关.当驾驶员从路口A驶向路口B时,他/她尝试选择将他/她不得不手动更换开 ...

  7. TCP为什么三次握手四次挥手

    TCP概述: 它提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接.因此TCP是一种可靠的的运输服务,也正因为这样,不可避免的增加了许多额外的开销,比如确认,流量控制等.对应的 ...

  8. Linux系统-----包管理器的演变

    每个电脑设备都使用某种形式的软件来执行其预定任务.在软件开发的早期,对产品进行了严格的bug和其他缺陷测试.在过去的十多年里,软件通过互联网发布,目的是通过应用新版本的软件来修复任何错误.在某些情况下 ...

  9. java不要登录发送邮件noReply

    最近在工作中遇到一个问题: 客户需要让我们的系统给他们发邮件,但是不给我们提供用户密码. 这样就导致一个问题,即,一般我们使用的都是smtp方式发邮件,发邮件的时候必须登录,虽然可以修改发件人的邮箱名 ...

  10. 4.RabbitMQ 4种交换模式

    请看 demo https://github.com/kevin-li-06/eshop.git