目录

(一)前言

(二)Convert函数知识

1. 定义和用法

2. 语法

3.  可以使用的 style 值

4. 实例

(三)时间函数

1. 前提

2. 常用时间函数

(1)格式

(2)实例

(四)一些特殊例子

1. 当天的0点0分0秒,当天的23点59分59秒

(1)第一种写法

(2)第二种写法

2. 当前时间所在的周一0点0分0秒 当前时间所在的周日23点59分59秒

 3. 当前时间所在的月初0点0分0秒 当前时间所在的月末23点59分59秒

4. 当前时间所在的年初0点0分0秒 当前时间所在的年尾23点59分59秒

5. 取上一个小时的初始整点


(一)前言

在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 Qq 季 1 ~ 4
Month Mm 月1 ~ 12
Day of year Dy y 一年的日数,一年中的第几日 1-366
Day Dd 日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww 周,一年中的第几周 0 ~ 51
Hour Hh 时0 ~ 23
Minute Mi 分钟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;


 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐