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. PHP如何查找一列有序数组是否包含某值(二分查找)

    问题:对于一列有序数组,如何判断给出的一个值,该值是否存在于数组. 思路:判断是否存在,最简单是,直接循环该数组,对每一个值进行比较.但是对于有序数组来说,这样写就完全没有利用好“有序”这一特点. 所 ...

  2. java校招一些面试的题目

    数组和链表的区别 数组静态分配内存,链表动态分配内存: 数组在内存中连续,链表不一定连续: 数组元素在栈区,链表元素在堆区: 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n) 数 ...

  3. 使用Zabbix监控Nginx服务实战案例

    使用Zabbix监控Nginx服务实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.编译安装nginx步骤详解并开启状态页 博主推荐阅读: https://www.cn ...

  4. pytorch & numpy广播法则

    广播法则 所有数组向维度最高的数组看齐,若维度不足则在最前面的维度用1补齐 扩展维度后,所有数组在某一维度相同或者长度为1,否则不能计算 当可以计算时,将长度为1的维度扩展为另一数组相应维度的长度 a ...

  5. 2-10 就业课(2.0)-oozie:8、定时任务的执行

    4.5.oozie的任务调度,定时任务执行 在oozie当中,主要是通过Coordinator 来实现任务的定时调度,与我们的workflow类似的,Coordinator 这个模块也是主要通过xml ...

  6. 解题报告:luogu P2678 跳石头

    题目链接:P2678 跳石头 很简单的二分查找,可悲的是我并不会. 不过题解贴心的写得很清楚(学会了套路) 二分一次判断一次,复杂度是\(O(nlogl)\),可以通过此题. \(Code:\) #i ...

  7. java#java.util.Date与java.time.LocalDateTime的转换

    转换主要通过Instant来进行的. Date date = new Date(); LocalDateTime localDateTime = LocalDateTime.ofInstant(dat ...

  8. 06.swoole学习笔记--异步tcp服务器

    <?php //创建tcp服务器 $host='0.0.0.0'; $port=; $serv=new swoole_server($host,$port); //设置异步进程工作数 $serv ...

  9. Oracle delete 之后恢复数据

    当我们粗心大意直接delete from不加条件而又没有回滚的时候有一个很简单的方法能够将数据恢复到delete之前的状态 第一种方案已经帮助我解决了实际问题.第二种方案暂未实践 在此记录下以便日后查 ...

  10. idea安装Maven Helper

    1. File -> Settings... 2. 选择 Plunins, 查询 Maven Helper,如果没有,点击 Search in repositories 3. 选择 Maven ...