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 ...
随机推荐
- SQL:1999基本语法
SQL:1999基本语法 SELECT [DISTINCT] * | 列名称 [AS]别名,........ FROM 表名称1 [别名1][CROSS JOIN表名称2 别名2]| [NATURAL ...
- Zookeeper Acl权限 超级用户权限 怎么跳过ACL密码/账户验证
Zookeeper的一个节点不知道什么原因无法删除了,查看日志发现是没有权限, 我们之前使用ACL进行Zookeeper节点的权限管理. 可以解决以下三种但不限于以下三种问题: 1.在设置Acl权限时 ...
- Docker部署启动错误,需要手动进入Docker的容器里,启动程序,排查错误
#docker-compose build --no-cache //重新创建容器,不管有没有 #docker-compose up #docker-compose up -d //后台启动并运行容器 ...
- Spring Boot中有多个@Async异步任务时,记得做好线程池的隔离!
通过上一篇:配置@Async异步任务的线程池的介绍,你应该已经了解到异步任务的执行背后有一个线程池来管理执行任务.为了控制异步任务的并发不影响到应用的正常运作,我们必须要对线程池做好相应的配置,防止资 ...
- scrum项目冲刺_day05总结
摘要:今日完成任务. 1.语音识别完成 2.搜索功能实现了从数据库中的查询 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成) 3.垃圾搜索 ...
- pymysql基础教程
pymysql基础教程 1.下载pymysql 在命令框输入指令即可 pip install pymysql 2.连接pymysql 连接数据库: import pymysql conn = pymy ...
- ubuntu系统执行生成密匙命令后,home目录下面没有生成.ssh目录
ubuntu系统配置git ssh时,执行:ssh-keygen -trsa -C "youremail@example.com",home目录下面没有生成.ssh目录. .ssh ...
- javascript 定时器 timer setTimeout setInterval (js for循环如何等待几秒再循环)
实现一个打点计时器,要求1.从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 12.返回的对象中需要包含一个 cance ...
- 详细的vsftpd配置
环境:CentOS 5.0 操作系统一.安装:1.安装Vsftpd服务相关部件:[root@KcentOS5 ~]# yum install vsftpd*Dependencies Resolved= ...
- CF1039D-You Are Given a Tree【根号分治,贪心】
正题 题目链接:https://www.luogu.com.cn/problem/CF1039D 题目大意 给出\(n\)个点的一棵树,然后对于\(k\in[1,n]\)求每次使用一条长度为\(k\) ...