SQL SERVER取时间书写方法大全

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

目录

(一)前言

(二)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 IDStyle 格式
100 或者 0mon dd yyyy hh:miAM (或者 PM)
101mm/dd/yy
102yy.mm.dd
103dd/mm/yy
104dd.mm.yy
105dd-mm-yy
106dd mon yy
107Mon dd, yy
108hh:mm:ss
109 或者 9mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110mm-dd-yy
111yy/mm/dd
112yymmdd
113 或者 13dd mon yyyy hh:mm:ss:mmm(24h)
114hh:mi:ss:mmm(24h)
120 或者 20yyyy-mm-dd hh:mi:ss(24h)
121 或者 21yyyy-mm-dd hh:mi:ss.mmm(24h)
126yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130dd mon yyyy hh:mi:ss:mmmAM
131dd/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说明
YearYyyyyy年 1753 ~ 9999
QuarterQq季 1 ~ 4
MonthMm月1 ~ 12
Day of yearDyy一年的日数,一年中的第几日 1-366
DayDd日,1-31
WeekdayDww一周的日数,一周中的第几日 1-7
WeekWkww周,一年中的第几周 0 ~ 51
HourHh时0 ~ 23
MinuteMi分钟0 ~ 59
SecondSss秒 0 ~ 59
MillisecondMs-毫秒 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;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值