文章目录
SqlServer中日期函数的汇总
1. sql中的日期格式化
- FORMAT 日期格式化
format 这个函数中需要两个参数,第一个是日期,第二个格式,例如日期 yyyy-MM-dd 只能按照时间类型去转换,毫秒数无法转换
这里的M
表示的是月份,MM
月份前面会补零,m
表示的是分钟,mm
分钟前面会补零
m
和M
无论位置都是表示的是月份和分钟数
-- 这里的格式化表达式可以是 yyyy-MM-dd HH:mm:ss
select FORMAT(GETDATE(),'yyyy-MM-dd')
--输出结果:2021-04-21
select FORMAT(GETDATE(),'yyyy-MM-dd HH:mm:ss')
--输出结果:2021-04-21 14:37:08
select format(getdate(),'M-d')
-- 输出结果:4-21
- CONVERT 日期格转换成字符串和格式化
convert 函数有三个参数 conver(data_type(length),data_to_be_converted,style)
- date_type 第一个参数表示的是转换后的类型,可以定义长度
- data_to_be_converted 第二个参数是需要转换的类型本身,例如当前日期 getdate 或者
- style 第三个参数是按照什么样的格式转换
-- 120 是sqlserver中内置的参数,他代表的格式是:yyyy-MM-dd HH:mm:ss
select convert(varchar(100),getDate(),120)
-- 输出结果:2021-04-21 14:55:20
select convert(varchar(10),getDate(),23)
-- 输出结果:2021-04-21
select convert(varchar(100),getDate(),121)
-- 输出结果:2021-04-21 14:58:33.060
select CONVERT(VARCHAR(10),GETDATE(),24)
-- 输出结果:14:59:38
常用的日期格式如下:
Style ID | Style 格式 |
---|---|
100 或者 0 | mon dd yyyy hh:miAM (或者 PM) |
101 | mm/dd/yy |
102 | yy.mm.dd |
103 | dd/mm/yy |
104 | dd.mm.yy |
105 | dd-mm-yy |
106 | dd mon yy |
107 | Mon dd, yy |
108 | hh:mm:ss |
109 或者 9 | mon dd yyyy hh:mi:ss:mmmAM(或者 PM) |
110 | mm-dd-yy |
111 | yy/mm/dd |
112 | yymmdd |
113 或者 13 | dd mon yyyy hh:mm:ss:mmm(24h) |
114 | hh:mi:ss:mmm(24h) |
120 或者 20 | yyyy-mm-dd hh:mi:ss(24h) |
121 或者 21 | yyyy-mm-dd hh:mi:ss.mmm(24h) |
126 | yyyy-mm-ddThh:mm:ss.mmm(没有空格) |
130 | dd mon yyyy hh:mi:ss:mmmAM |
131 | dd/mm/yy hh:mi:ss:mmmAM |
- CAST 字符串转换成日期
cast ( expression AS data_type) 将一种数据类型的表达式转换为另一种数据类型的表达式。
使用的时候有两个参数
- expression:任何可转换为 data_type 的有效表达式;
- data_type 数据库中的所有支持的数据类型
select cast('2021-04-21' as datetime)
-- 输出结果: 2021-04-21 00:00:00
select cast(getdate() as date)
-- 输出结果: 2021-04-21
2. dateadd 时间的增加和减少
dateadd 这个函数有三个参数
参数1:类型,如 day month qq year
参数2:数据,增加或者减少的数据
参数3:日期,可以是getdate,也可以是字符串
-- 当前日期
select getdate()
-- 2021-04-21 16:18:28
select dateadd(day,3,getdate())
-- 2021-04-24 16:20:35
select dateadd(day,3,'2021-04-21 16:18:28')
-- 2021-04-24 16:20:35
select dateadd(day,-3,getdate())
-- 2021-04-18 16:20:53
select dateadd(year,1,getdate())
-- 2022-04-21 16:21:34
select dateadd(month,1,getdate())
-- 2021-05-21 16:22:02
select dateadd(qq,1,getdate())
-- 2021-07-21 16:22:59
select dateadd(week,1,getdate())
-- 2021-04-28 16:23:42
3. datediff 两个时间之间的差 返回跨两个指定日期的日期和时间边界数。
datediff 这个函数有三个参数
参数1:类型,如 day month qq year
参数2:数据,增加或者减少的数据
参数3:日期,可以是getdate,也可以是字符串
-- 当前日期
select getdate()
-- 2021-04-21 16:27:05
select datediff(day,'2020-03-20 16:27:05',getdate())
-- 397
select datediff(month,'2020-03-20 16:27:05',getdate())
-- 13
select datediff(year,'2020-03-20 16:27:05',getdate())
-- 1
select datediff(qq,'2020-03-20 16:27:05',getdate())
-- 5
select datediff(week,'2020-03-20 16:27:05',getdate())
-- 57
4. datename 获取指定日期的指定部分的字符串
datename 的作用是获取指定日期的详细数据,比如获取日期,月份,年份,周几
-- 当前日期
select getdate()
-- 2021-04-21 16:27:05
select datename(day,getdate())
-- 21
select datename(dayofyear,getdate()) -- 获取一年中的第几天
-- 111
select datename(month,getdate())
-- 04
select datename(year,getdate())
-- 2021
select datename(weekday,getdate())
-- 星期三
select datename(week,getdate()) -- 获取一年中的第几周
-- 17
5. datepart 获取星期的数字
SELECT DATEPART(weekday,'20210209') --返回值为2
SELECT DateName(weekday,'20210209') --返回值为星期二
6. eomonth 获取月份的最后一天
eomonth 给定一个日期,然后对日期的月份进行计算后获取计算后月份的最后一天
-- 当前日期
select getdate()
-- 2021-04-21 17:41:44
select eomonth(getdate(),1)
-- 2021-05-31
select eomonth(getdate(),-1)
-- 2021-03-31