T-SQL——函数——时间操作函数
0. 日期和时间类型
0.0 时间类型
| 数据类型 | 时间范围 | 准确度 | 推荐格式 | 示例 |
|---|---|---|---|---|
| DATETIME | 1753-01-01到9999-12-31 | 3.33毫秒 | 'YYYYMMDD hh:mm:ss.nnn' | 2021-10-23 14:35:20.727 |
| SMALLDATETIME | 1900-01-01到2079-06-06 | 1分钟 | 'YYYYMMDD hh:mm' | 2021-10-23 14:41:00 |
| DATE | 0001-01-01到9999-12-31 | 1天 | 'YYYY-MM-DD' | 2021-10-23 |
| TIME | 00:00:00:0000000到23:59:59.9999999 | 100纳秒 | 'hh:mm:ss:nnnnnnn' | 14:44:35.4170000 |
| DATETIME2 | 0001-01-01 00:00:00:0000000到9999-12-31 23:59:59.9999999 | 100纳秒 | 'YYYY-MM-DD hh:mm:ss.nnnnnnn' | 2021-10-23 14:46:10.9600000 |
| DATETIMEOFFSET | 0001-01-01 00:00:00:0000000到9999-12-31 23:59:59.9999999 | 100纳秒 | 'YYYY-MM-DD hh:mm:ss.nnnnnnn [+|-] hh:mm' | 2021-10-23 14:48:30.8730000 +00:00 |
- [注1] SQL Server2008之前的时间类型只有 DATETIME 和 SMALLDATETIME ,2008之后才出现日期和时间的单独类型
- [注2] DATETIME2比DATETIME的范围变大了,精确杜也提高了
- [注3] 推荐格式只是推荐格式,其上任何日期类型,都是即支持“YYYY-MM-DD”也是支持“YYYYMMDD”
- [注4] DATETIMEOFFSET中的 +/- hh:mm表示的时区差
- UTC时间:世界协调时间,当今世界的标准时间
- UTC+时区差=本地时间,时区:东为正,西为负
- 北京时区是东八区,领先UTC时间8个小时
简单测试,有一个直观的理解:
DECLARE @dateTime DATETIME = GETDATE();
SELECT @dateTime;
--结果:2021-10-23 11:53:56.420
DECLARE @smallDateTime SMALLDATETIME =GETDATE();
SELECT @smallDateTime
--结果:2021-10-23 11:54:00
DECLARE @date DATE=GETDATE();
SELECT @date
--结果:2021-10-23
DECLARE @time TIME =GETDATE();
SELECT @time
--结果:11:53:56.4200000
DECLARE @dateTime2 DATETIME2 =GETDATE();
SELECT @dateTime2
--结果:2021-10-23 11:53:56.4200000
DECLARE @dateTimeOffset DATETIMEOFFSET =GETDATE();
SELECT @dateTimeOffset
--结果:2021-10-23 11:53:56.4200000 +00:00
1. 转换函数
1.1 CAST
【说明】 将指定的表达式转换为目标数据类型。这里有一个前提就是指定表达式理论上可以转换为你指定的目标类型,负责报错
【语法】
CAST( expressionString AS dataType)【示例】
SELECT CAST('012' AS INT)返回:12SELECT CAST('1.23' AS INT)返回:在将 varchar 值 '1.23' 转换成数据类型 int 时失败。
1.2 CONVERT
【说明】 其作用和CAST相同
- 但是CONVERT可以设置第三个参数来指定转换的样式,所以可以通过该参数将特定的时间字符串转为特定的时间格式
- CAST是标准SQL,而CONVERT不是标准SQL
【语法】
COVNERT(dataType,expressionString,[style_number])【示例】
SELECT CONVERT(INT, '012')返回:12- TODO……
2. 日期操作函数
2.0 GETDATE和GETUTCDATE
【说明】 GETDATE和GETUTDATE两个函数都是用于返回datetime类型的当前日期和时间
- GETUTDATE()是使用数据库服务器上的时区设置来求UTC时间
【示例】
SELECT GETDATE()
--结果:2021-10-23 16:59:59.917
SELECT GETUTCDATE()
--结果:2021-10-23 08:59:59.917
--可以直白的看到当前的北京时间(东八区)比世界协调时间快8个小时
2.1 SYSDATETIME和SYSUTCDATETIME
【说明】返回当前时间。等价于GERDATE和GETUTCDATE,这是在SQL Server2008中新增的,返回的2008中增加的DATETIME2类型的结果
【示例】
SELECT SYSDATETIME()
--结果:2021-10-23 17:01:54.9879870
SELECT SYSUTCDATETIME()
--结果:2021-10-23 09:01:54.9879870
2.2 DATEADD
【说明】 用于在日期值上加上指定单位指定的间隔
- 注意间隔值可以是负数,从而实现减去指定单位指定的间隔
【语法】
DATEADD(datePart,number,date)时间间隔 参数 年 Year,yyyy,yy 季度 Quarter,qq,q 月 Month,mm,m 一年内的天 DayOfYear,dy,y 天 Day,dd,d 星期 Week,wk,www 【示例】
--当前日期加1天
SELECT DATEADD(Day,1,GETDATE())
--当前日期减1天
SELECT DATEADD(Day,-1,GETDATE())
2.3 DATEDIFF
【说明】 按照指定的间隔单位,计算两个日期之间的间隔
【语法】
DATEDIFF(datePart,startDate,endDate)
注意:其中的datePart和DATEADD中的间隔单位是一样的【示例}
--计算两个日期之间间隔几天
SELECT DATEDIFF(DAY,'2021-01-01','2021-01-02')--结果:1
--计算两个日期之间间隔几个月
SELECT DATEDIFF(MONTH,'2020-01-01','2021-01-02')--结果:12
2.4 DATEPART和DATENAME
【说明】获取日期中的指定部分,如年,月,日
中文环境中二者不同之处:
DATEPART返回的是一个整形,
DATENAME返回的是一个字符串类型(若是英文环境下,比如返回月份,则直接返回月份的名称)【语法】
DATEPART(datePart,dateString)
DATENAME(datePart,dateString)【示例】
SELECT DATENAME(MONTH,'2021-01-01')--结果:1(字符串类型) SELECT DATEPART(MONTH,'2021-01-01')--结果:1(整型)
2.5 YEAR、MONTH和DAY
【说明】 获取指定日期中的中指定的部分,如 年,月,日
可以认为是DATEPART的简化函数【语法】
YEAR(dateString)
MONTH(dateString)
DAY(dateString)【示例】
SELECT YEAR('20211031')--结果:2021
SELECT MONTH('20211031')--结果:10
SELECT DAY('20211031')--结果:31
2.6 ISDATE
【说明】判断指定的字符串是否可以转换为时间格式
【语法】
ISDATE(dateString)【示例】
SELECT ISDATE('20211031')--结果:1
SELECT ISDATE('20211031 22:46:01:01')--结果:1
SELECT ISDATE('2021-10-31')--结果:1
SELECT ISDATE('2021/10/31')--结果:1
SELECT ISDATE('2021-10-32')--结果:0
3. 综合使用示例
3.1 根据出生日期计算年龄
CREATE TABLE #temptable
(
[Name] VARCHAR(4),
[Brithday] VARCHAR(10)
);
INSERT INTO #temptable
VALUES
('张三', '1994-01-01'),
('李四','1994-12-01');--注:测试日期是2021年10月31日
SELECT Name,
DATEDIFF(YEAR, Brithday, GETDATE()) AS Age,--精确到年
CONVERT(INT,DATEDIFF(DAY,Brithday,GETDATE())/365.25) AS Age--精确到日
FROM #temptable;
--结果:执行这段语句的日期是2021年10月31日,故李四还没有到今年的生日,所以是26
--Name Age Age
------ -------- ---------
--张三 27 27
--李四 27 26
3.2 待补充中……
T-SQL——函数——时间操作函数的更多相关文章
- mysql时间操作函数和存储过程
因为业务须要统计一批数据.用到关于mysql的时间操作函数和存储过程,问题已经基本解决.把过程记录下: 1. mysql的语句中不支持直接用循环.循环仅仅能在存储过程中使用. 2. 写为文件时,注意一 ...
- MS SQL Server时间常用函数
SQLServer时间日期函数详解,SQLServer,时间日期, 1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础 ...
- SQL servcer 时间日期函数、数据类型转换
1.时间日期函数 2.数据类型转换 3.习题 建立两个表,一个部门表,一个人员表.部门:部门的编号,部门的名称,部门的职责.人员:人员的编号,姓名,年龄,性别,cid所属部门
- PL/SQL 日期时间类型函数及运算
内部存储格式: 世纪.年.月.日.小时.分钟.秒 默认格式是:DD-MON-RR. SYSDATE 返回当前的系统时间. SELECT SYSDATE FROM DUAL: 对日期的数学运算 SELE ...
- sql server 时间处理函数 datediff() 和getdate()
一: DATEDIFF() 定义和用法 DATEDIFF() 函数返回两个日期之间的时间. 语法 DATEDIFF(datepart,startdate,enddate) startdate 和 en ...
- HIVE 时间操作函数
转自http://www.oratea.net/?p=944 日期函数UNIX时间戳转日期函数: from_unixtime语法: from_unixtime(bigint unixtime[, ...
- SQL server 时间日期函数、类型转换
一.日期与时间函数 二.子查询与分页查询
- Hive 时间操作函数(转)
1.日期函数UNIX时间戳转日期函数: from_unixtime 语法: from_unixtime(bigint unixtime[, string format]) 返回值: string ...
- SQL Server 时间类型转换函数
cast ( expression as data_type(length))convert ( data_type (length), expression, style) //如果未指定 leng ...
随机推荐
- 学习Tomcat(三)之容器连接器
Tomcat最底层使用的是Java标准的SocketServer和Socket接受和处理请求,但是Socket接受到的数据是网络运输层的TCP或UDP协议的数据,需要转为Http或者其它应用层协议的数 ...
- SpringMVC执行流程总结
SpringMVC 执行流程: 用户发送请求至前端控制器 DispatcherServlet DispatcherServlet 收到请求调用处理映射器 HandlerMapping 处理映射器根据请 ...
- idea创建Maven项目没有src目录,且依赖也没有更新
刚开始用idea的时候,重新配置安装了Maven,但是创建项目的时候发现创建的目录少了很多东西,今天重新查看了一下,发现了原因....... 话不多说,安装配置Maven的方法网上都有,我之前改路径的 ...
- Jenkins教程(七)实现 GitLab 提交/合并代码触发构建
楔子 最近公司推行统一构建平台(基于 Jenkins + Kubernetes 插件创建 slave),原来部门自建的 Jenkins 不让用了. 迁移上统一构建平台的最大阻力是前端模块发布的问题: ...
- 5ucms的评论列表该怎么写
查看所有评论 <a href="{sys:plusurl}comment/?id={field:id}">查看所有评论</a> <linkhref=& ...
- 深入xLua实现原理之C#如何调用Lua
本文主要是探讨xLua下C#调用Lua的实现原理,有关Lua如何调用C#的介绍可以查看深入xLua实现原理之Lua如何调用C# C#与Lua数据通信机制 无论是Lua调用C#,还是C#调用Lua,都需 ...
- jmeter之图形结果
jmeter监听器中的图形报表如何分析,反正第一次看到图时,不觉明厉害. 样本数目:是总共发送到服务器的请求数. 最新样本:是代表时间的数字,是服务器响应最后一个请求的时间. 吞吐量:是服务器每分钟处 ...
- python with 线程锁
import threading import time num = 0 # 全局变量多个线程可以读写,传递数据 mutex = threading.RLock() # 创建一个锁 class Myt ...
- Windows系统中的SVN使用方法
Windows 下搭建 SVN(3.9版本)服务器 2018年08月11日 12:22:55 Amarao 阅读数 11984 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议, ...
- P7737-[NOI2021]庆典【tarjan,虚树】
正题 题目链接:https://www.luogu.com.cn/problem/P7737 题目大意 给出一张无向图满足若\(x\Rightarrow z,y\Rightarrow z\)那么有\( ...