目录

(一)前言

(二)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();

sql server 怎么取当前时间 sql server获取时间_sql

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

sql server 怎么取当前时间 sql server获取时间_SQL SERVER时间_02

(2)第二种写法

SELECT cast(convert(char(10),getdate(),120)+' 00:00:00' as
datetime)--取0点

 

sql server 怎么取当前时间 sql server获取时间_sqlserver_03

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

sql server 怎么取当前时间 sql server获取时间_sqlserver_04

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

sql server 怎么取当前时间 sql server获取时间_SQL SERVER时间_05

 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

sql server 怎么取当前时间 sql server获取时间_SQL SERVER时间_06

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

sql server 怎么取当前时间 sql server获取时间_sqlserver_07

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

即假如现在是下午18:30,那我们要取的是 17:00。

select  convert(datetime,convert(VARCHAR(13),DATEADD(hour,-1,GETDATE()),120) + ':00:00.000') as a;

sql server 怎么取当前时间 sql server获取时间_sql_08