相关推荐recommended
SQL详细的日期时间
作者:mmseoamin日期:2024-03-20

一、字符串转换和日期常用的函数

1.getdate函数:获取系统当前日期时间

2.cast函数:cast('20023-12-06' as datetime) 

3.convert函数:convert(varchar(100),getdate(),120)

4.dateadd函数:向指定日期加上一段时间,返回新的值,例如:dateadd(day,3,getdate()) --返回系统日期增加三天后的日期

5.datediff函数:计算开始日期和结束日期之间的差值,例如:datediff(day,'2023-12-6',getdate()) --返回2023年12月6号与系统日期相差多少天

6.datepart函数和datename函数:两者在为weekday类型参数时返回结果不同,其余返回结果相同,但返回数据类型不相同

     datepart:返回代表指定日期的指定日期部分的整数,例如:datepart(day,getdate())  --返回当前系统日期的天数(int)

     datename:返回返回代表指定日期的指定日期部分的字符串,例datename(weekday,getdate()) --返回当前系统日期是星期几(nvarchar)

7.year() ,month(),day()函数:返回指定日期的年月日的整数(int)

二.SQL日期格式转换

SELECT CONVERT(varchar(100), GETDATE(), 0)   --> 12 08 2023 16:17PM

SELECT CONVERT(varchar(100), GETDATE(), 1)   --> 12/08/23

SELECT CONVERT(varchar(100), GETDATE(), 2)   --> 23.12.08

SELECT CONVERT(varchar(100), GETDATE(), 3)   --> 08/12/23

SELECT CONVERT(varchar(100), GETDATE(), 4)   --> 08.12.23

SELECT CONVERT(varchar(100), GETDATE(), 5)   --> 08-12-23

SELECT CONVERT(varchar(100), GETDATE(), 6)   --> 08 12 23

SELECT CONVERT(varchar(100), GETDATE(), 7)   --> 12 08, 23

SELECT CONVERT(varchar(100), GETDATE(), 8)   --> 17:30:45

SELECT CONVERT(varchar(100), GETDATE(), 9)   --> 12 08 2023 17:30:45:567PM

SELECT CONVERT(varchar(100), GETDATE(), 10)  --> 12-08-23

SELECT CONVERT(varchar(100), GETDATE(), 11)  --> 23/12/08

SELECT CONVERT(varchar(100), GETDATE(), 12)  --> 231208

SELECT CONVERT(varchar(100), GETDATE(), 13)  --> 08 12 2023 17:30:45:567

SELECT CONVERT(varchar(100), GETDATE(), 14)  --> 17:30:45:567

SELECT CONVERT(varchar(100), GETDATE(), 20)  --> 2023-12-08 17:30:45

SELECT CONVERT(varchar(100), GETDATE(), 21)  --> 2023-12-08 17:30:45:567

SELECT CONVERT(varchar(100), GETDATE(), 22)  --> 12/08/23 17:30:45:567PM

SELECT CONVERT(varchar(100), GETDATE(), 23)  --> 2023-12-08

SELECT CONVERT(varchar(100), GETDATE(), 24)  --> 17:30:45

SELECT CONVERT(varchar(100), GETDATE(), 25)  --> 2023-12-08 17:30:45.567

SELECT CONVERT(varchar(100), GETDATE(), 100) --> 12 08 2023 17:30PM

SELECT CONVERT(varchar(100), GETDATE(), 101) --> 12/08/2023

SELECT CONVERT(varchar(100), GETDATE(), 102) --> 2023.12.08

SELECT CONVERT(varchar(100), GETDATE(), 103) --> 08/12/2023

SELECT CONVERT(varchar(100), GETDATE(), 104) --> 08.12.2023

SELECT CONVERT(varchar(100), GETDATE(), 105) --> 08-12-2023

SELECT CONVERT(varchar(100), GETDATE(), 106) --> 08 12 2023

SELECT CONVERT(varchar(100), GETDATE(), 107) --> 12 08, 2023

SELECT CONVERT(varchar(100), GETDATE(), 108) --> 17:30:45

SELECT CONVERT(varchar(100), GETDATE(), 109) --> 12 08 2023 17:30:45:567PM

SELECT CONVERT(varchar(100), GETDATE(), 110) --> 12-08-2023

SELECT CONVERT(varchar(100), GETDATE(), 111) --> 2023/12/08

SELECT CONVERT(varchar(100), GETDATE(), 112) --> 20231208

SELECT CONVERT(varchar(100), GETDATE(), 113) --> 08 12 2023 17:30:45:567

SELECT CONVERT(varchar(100), GETDATE(), 114) --> 17:30:45:567

SELECT CONVERT(varchar(100), GETDATE(), 120) --> 2023-12-08 17:30:45

SELECT CONVERT(varchar(100), GETDATE(), 121) --> 2023-12-08 17:30:45.567

SELECT CONVERT(varchar(100), GETDATE(), 126) --> 2023-12-08T17:30:45.567

SELECT CONVERT(varchar(100), GETDATE(), 130) --> 26 ????? ?????? 1445 5:30:45:567PM

SELECT CONVERT(varchar(100), GETDATE(), 131) --> 26/05/1445 5:30:45:567PM

三、日期函数中常用的参数值

YearYy
QuarterQq
MonthMm
年中的日Day of yearDy
DayDd
周数WeekdayDw
第几周WeekWk
小时HourHh
分钟MinuteMi
秒钟SecondSs
毫秒MillisecondMs
微秒MicrosecondMcs
纳秒NanosecondNs


四.动态获取想要的某一天

select datediff(month,0,getdate())   
--表示SQLServer中日期1900-01-01 与当前日期的月数
select dateadd(week,datediff(week,0,dateadd(week,0,getdate())),0)
--获取当前周的第一天(可通过最里层的dateadd中的0增加或者减少获取前一周与后一周的第一天)
select dateadd(Second,-1,dateadd(week, datediff(week,0,dateadd(week,0,getdate()))+1,0))
--获取当前周的最后一天,添加一周以获取下一周的第一天,当前周的最后一天为下一个周的第一天减去一秒
--(可通过最里层的dateadd中的0增加或者减少获取前一周与后一周的最后一天)
select dateadd(month,datediff(month,0,dateadd(month,0,getdate())),0) 
--获取当前月份的第一天(可通过最里层的dateadd中的0增加或者减少获取前一个月与后一个月的第一天)
select dateadd(Second,-1,dateadd(month, datediff(month,0,dateadd(month,0,getdate()))+1,0))
--获取当前月的最后一天,添加一月以获取下一个月的第一天,当前月份的最后一天为下一个月的第一天减去一秒
--(可通过最里层的dateadd中的0增加或者减少获取前一个月与后一个月的最后一天)
select dateadd(quarter,datediff(quarter,0,dateadd(quarter,-0,getdate())),0) 
--获取当前季度的第一天(可通过最里层的dateadd中的0增加或者减少获取前一个季度与后一个季度的第一天)
select dateadd(Second,-1,dateadd(quarter,datediff(quarter,0,dateadd(quarter,0,getdate()))+1,0)) 
--获取当前季度的最后一天,添加一个季度以获取下一个季度的第一天,最后一天为下一个季度的第一天减去一秒
--(可通过最里层的dateadd中的0增加或者减少获取前一个季度与后一个季度的最后一天)
select dateadd(year,datediff(year,0,dateadd(year,0,getdate())),0) 
--获取当前年度的第一天(可通过最里层的dateadd中的0增加或者减少获取前一个年度与后一个年度的第一天)
select dateadd(Second,-1,dateadd(year, datediff(year,0,dateadd(year,0,getdate()))+1,0)) 
--获取当前年度的最后一天,添加一个年度以获取下一个年度的第一天,最后一天为下一个年度的第一天减去秒
--(可通过最里层的dateadd中的0增加或者减少获取前一个年度与后一个年度的最后一天)