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 ...
随机推荐
- HTTP证书申请,设置应用程序服务器使用HTTPS
HTTP证书申请,设置应用程序服务器使用HTTPS https://certs.godaddy.com/repository/ 根证书和中级证书下载地址(godaddy) ######Godaddy购 ...
- HCNP Routing&Switching之IS-IS路由渗透和开销
前文我们了解了IS-IS邻居建立过程.LSDB同步.拓扑计算和路由的形成:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15265698.html:今天我们来聊 ...
- CentOS8部署nextcloud网盘
Nextcloud是一款开源的存储软件,功能丰富,支持多人协同工作,目前完全免费. 官网:https://www.nextcloud.com 架构:LAMP或LNMP 本文以LAMP为基础 注意:ph ...
- MapReduce原理深入理解(一)
1.MapReduce概念 1)MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. 2)MapReduce是分布式运行的,由两个阶段组成:Map和R ...
- PHP的变量赋值
这个标题估计很多人会不屑一顾,变量赋值?excuse me?我们学开发的第一课就会了好不好.但是,就是这样基础的东西,反而会让很多人蒙圈,比如,值和引用的关系.今天,我们就来具体讲讲. 首先,定义变量 ...
- 一起搞懂PHP的错误和异常(三)
关于错误与异常的最后一篇文章,我们来进行一些总结. PHP中错误和异常的区别 通过前面两篇文章的学习,我们来直接将错误和异常摆上来进行对比,看看他们的区别与联系: 错误的出现通常是语法或编译运行时错误 ...
- obs软件mac设置
1 远程电脑软件teamview或者向日葵 远程mac电脑会时黑屏或连不上, 需要设置系统偏好->设置软件权限 2 设置obs 显示不出画面或声音,也需要在系统偏好设置obs的权限(首先打开OB ...
- Linux系列(40) - 自动同步时间chrony
前言 Centos8开始取消了ntp同步时间,改为chrony同步 chrony工具安装 yum -y install chrony 修改配置文件 将配置文件中的同步服务器修改为国内的时间服务器(推荐 ...
- mqtt网关服务器连接阿里云关联物模型
mqtt网关服务器连接阿里云关联物模型 卓岚专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体. 可以连接阿 ...
- Python爬虫--淘宝“泸州老窖”
爬虫淘宝--"泸州老窖" 爬去淘宝"泸州老窖" 相关信息: import requests import re import json import panda ...