目录
2. 当前时间所在的周一0点0分0秒 当前时间所在的周日23点59分59秒
3. 当前时间所在的月初0点0分0秒 当前时间所在的月末23点59分59秒
4. 当前时间所在的年初0点0分0秒 当前时间所在的年尾23点59分59秒
(一)前言
在SQL的过滤条件中合理地使用时间格式,这在我们日常工作是很常见的。所以本文我整理了以SQL SERVER为使用版本的一些经典的时间取法的书写方式。
(二)Convert函数知识
1. 定义和用法
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
2. 语法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
3. 可以使用的 style 值
| 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 |
4. 实例
select CONVERT(varchar, getdate(), 120 ) --返回 2022-10-30 00:04:28
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') --返回 20221030000446
select CONVERT(varchar(12) , getdate(), 111 ) --返回 2022/10/30
select CONVERT(varchar(12) , getdate(), 112 ) --返回 20221030
select CONVERT(varchar(12) , getdate(), 102 ) --返回 2022.10.30
select CONVERT(varchar(12) , getdate(), 101 ) --返回 10/30/2022
select CONVERT(varchar(12) , getdate(), 103 ) --返回 30/10/2022
select CONVERT(varchar(12) , getdate(), 104 ) --返回 30.10.2022
select CONVERT(varchar(12) , getdate(), 105 ) --返回 30-10-2022
select CONVERT(varchar(12) , getdate(), 106 ) --返回 30 10 2022
select CONVERT(varchar(12) , getdate(), 107 ) --返回 10 30, 2022
select CONVERT(varchar(12) , getdate(), 108 ) --返回 00:07:14
select CONVERT(varchar(12) , getdate(), 109 ) --返回 10 30 2022 1
select CONVERT(varchar(12) , getdate(), 110 ) --返回 10-30-2022
select CONVERT(varchar(12) , getdate(), 113 ) --返回 30 10 2022 0
select CONVERT(varchar(12) , getdate(), 114 ) --返回 00:09:00:440
(三)时间函数
1. 前提
我们将使用 GETDATE() 函数来获得当前的日期/时间
select getdate();

2. 常用时间函数
(1)格式
| 函数 | 参数/功能 |
| GetDate( ) | 返回系统目前的日期与时间 |
| DateDiff (interval,date1,date2) | 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 |
| DateAdd (interval,number,date) | 以interval指定的方式,加上number之后的日期 |
| DatePart (interval,date) | 返回日期date中,interval指定部分所对应的整数值 |
| DateName (interval,date) | 返回日期date中,interval指定部分所对应的字符串名称 |
| 值 | 缩 写(Sql Server) | Access 和 ASP | 说明 |
| Year | Yy | yyyy | 年 1753 ~ 9999 |
| Quarter | q | 季 1 ~ 4 | |
| Month | Mm | m | 月1 ~ 12 |
| Day of year | Dy | y | 一年的日数,一年中的第几日 1-366 |
| Day | Dd | d | 日,1-31 |
| Weekday | Dw | w | 一周的日数,一周中的第几日 1-7 |
| Week | Wk | ww | 周,一年中的第几周 0 ~ 51 |
| Hour | Hh | h | 时0 ~ 23 |
| Minute | Mi | n | 分钟0 ~ 59 |
| Second | Ss | s | 秒 0 ~ 59 |
| Millisecond | Ms | - | 毫秒 0 ~ 999 |
(2)实例
--dateadd 原有时间加: 2022-02-17 13:20:16 此时间加12个月
select dateadd(MONTH,12,'2022-02-17 13:20:16') --返回:2023-02-17 13:20:16.000 (参数month可以改为 day,year等日期加相应的值)
--datediff 两个时间的差 (后面-前面=返回值)
select datediff(day,'2022-02-01','2022-02-18') --返回:17 (参数day可以改为 month,year等日期加相应的值)
--datepart 获取日期的某个部分整数
select DATEPART(month, '2022-2-17') --返回 2 (参数month可以改为 day,year等日期加相应的值)
--datename 获取指定部位的字符串
select datename(weekday, '2022-2-17') --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值)
--day(), month(),year() 获取指定部位的字符串
select day('2022-2-15') --返回15
(四)一些特殊例子
1. 当天的0点0分0秒,当天的23点59分59秒
(1)第一种写法
select convert(
datetime
,convert(varchar(10),getdate(),120)) as a,DATEADD(SS,-1,DATEADD(DD,1,CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),120)))) as b

(2)第二种写法
SELECT cast(convert(char(10),getdate(),120)+' 00:00:00' as
datetime)--取0点

SELECT cast(convert(char(10),getdate(),120)+' 23:59:59' as datetime)--取24点

2. 当前时间所在的周一0点0分0秒 当前时间所在的周日23点59分59秒
select DATEADD(wk,DATEDIFF(wk,0,getdate()),0) as a ,DATEADD(day,6,DATEADD(wk,DATEDIFF(wk,0,getdate()),0)) as b,DATEADD(SS,-1,DATEADD(DD,1,CONVERT(DATETIME,CONVERT(VARCHAR(10),DATEADD(day,6,DATEADD(wk,DATEDIFF(wk,0,getdate()),0)),120)))) as c

3. 当前时间所在的月初0点0分0秒 当前时间所在的月末23点59分59秒
select dateadd(month, datediff(month, 0, getdate()), 0) as a ,dateadd(month, datediff(month, 0, dateadd(month, 1, getdate())), -1) as b,DATEADD(SS,-1,DATEADD(DD,1,CONVERT(DATETIME,CONVERT(VARCHAR(10),dateadd(month, datediff(month, 0, dateadd(month, 1, getdate())), -1),120)))) as c

4. 当前时间所在的年初0点0分0秒 当前时间所在的年尾23点59分59秒
select dateadd(year,datediff(year,0,getdate()),0) as a ,dateadd(year,datediff(year,-1,getdate()),-1) as b,DATEADD(SS,-1,DATEADD(DD,1,CONVERT(DATETIME,CONVERT(VARCHAR(10),dateadd(year,datediff(year,-1,getdate()),-1),120)))) as c

5. 取上一个小时的初始整点
即假如现在是下午18:30,那我们要取的是 17:00。
select convert(datetime,convert(VARCHAR(13),DATEADD(hour,-1,GETDATE()),120) + ':00:00.000') as a;

本文以SQL SERVER为使用版本,整理了经典的时间取法书写方式。介绍了Convert函数的定义、用法、语法、可用的style值及实例,还提及常用时间函数,给出当天、本周、本月、本年特定时间点以及上一小时初始整点的取法示例。
1385

被折叠的 条评论
为什么被折叠?



