亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQL?Server各種日期時(shí)間計(jì)算語(yǔ)句

 更新時(shí)間:2023年08月06日 10:12:25   作者:離不火  
有時(shí)候我們需要獲取指定日期時(shí)間的數(shù)據(jù),那么就需要用到sqlserver中的日期時(shí)間算法了,下面腳本小編就為大家分享一下

下面的需要在sqlserver環(huán)境中測(cè)試

一、時(shí)間計(jì)算

select 
GetDate() '當(dāng)前時(shí)間', 					--2022-11-23 10:42:09.947
DATEADD(yy,-1,GetDate()) '1年前', 		--2021-11-23 10:42:09.947
DATEADD(yy,1,GetDate()) '1年后', 		--2023-11-23 10:42:09.947
DATEADD(mm,-2,GetDate()) '2月前', 		--2022-09-23 10:42:09.947
DATEADD(mm,2,GetDate()) '2月后', 		--2023-01-23 10:42:09.947
DATEADD(hh,-3,GetDate()) '3小時(shí)前', 		--2022-11-23 07:42:09.947
DATEADD(hh,3,GetDate()) '3小時(shí)后', 		--2022-11-23 13:42:09.947
DATEADD(minute,-5,GetDate()) '5分鐘前', 	--2022-11-23 10:37:09.947
DATEADD(minute,5,GetDate()) '5分鐘后', 	--2022-11-23 10:47:09.947
DATEADD(ss,-10,GetDate()) '10秒前', 	--2022-11-23 10:41:59.947
DATEADD(ss,10,GetDate()) '10秒后' 		--2022-11-23 10:42:19.947

結(jié)果:

在這里插入圖片描述

二、獲取整點(diǎn)時(shí)間

select
GetDate() '當(dāng)前時(shí)間',									--2022-11-23 10:42:09.947
Convert(Char(14),GetDate(),120)+'00:00.000' '整點(diǎn)時(shí)間',	--2022-11-23 10:00:00.000
Convert(Char(17),GetDate(),120)+'00.000' '整分時(shí)間'		--2022-11-23 10:42:00.000

結(jié)果:

在這里插入圖片描述

三、獲取年月日、時(shí)分秒

select
GetDate() '當(dāng)前時(shí)間',				--2022-11-23 10:42:09.947
DATEPART(year,GETDATE()) '年', 		--2022
DATEPART(MONTH ,GETDATE()) '月',	--11
DATEPART(day ,GETDATE()) '日',		--23
DATEPART(hour ,GETDATE()) '時(shí)',		--10
DATEPART(MINUTE ,GETDATE()) '分',	--42
DATEPART(SECOND ,GETDATE()) '秒'	--9

結(jié)果:

在這里插入圖片描述

四、計(jì)算兩個(gè)日期之間相差多少年月日、時(shí)分秒

select
DATEDIFF(yy,'2018-06-20','2022-11-25') '相差多少年',
DATEDIFF(mm,'2022-06-20','2022-11-25') '相差多少月',
DATEDIFF(dd,'2022-11-23','2022-11-25') '相差多少日',
DATEDIFF(hh,'2022-11-25 08:00','2022-11-25 10:30') '相差多少小時(shí)',
DATEDIFF(MINUTE,'2022-11-25 10:00','2022-11-25 10:30') '相差多少分',
DATEDIFF(ss,'2022-11-25 10:25:20','2022-11-25 10:30:30') '相差多少秒'

結(jié)果:

在這里插入圖片描述

SQL Server時(shí)間算法總結(jié)

declare @date  datetime 
set @date=getdate() 
--前一天,給定日期的前一天 
select dateadd(day,-1,@date) AS '前一天' 
--后一天,給定日期的后一天  
select dateadd(day,1,@date) AS '后一天' 
go 
--月初,計(jì)算給定日期所在月的第一天 
--這個(gè)計(jì)算的技巧是先計(jì)算當(dāng)前日期到“1900-01-01”的時(shí)間間隔數(shù),然后把它加到“1900-01-01”上來(lái)獲得特殊的日期,這個(gè)技巧可以用---來(lái)計(jì)算很多不同的日期。 
declare @date  datetime 
set @date=getdate() 
select dateadd(month,datediff(month,'1900-01-01',@date),'1900-01-01') AS '所在月的第一天' 
--精簡(jiǎn)算法,根據(jù)SQL Server的時(shí)間表示方式可知,'1900-01-01' 可以用0代替 
select dateadd(month,datediff(month,0,@date),0) AS '所在月的第一天' 
--上面兩種算法精確到天 時(shí)分秒均為00:00:00.000 
--下面算法課以保留時(shí)分秒 
--思路:用給定日期減去月第一天與給定日期差的天數(shù) 
select dateadd(day,1-datepart(day,@date),@date) 
go 
--月末,計(jì)算給定日期所在月的最后一天 
declare @date  datetime 
set @date=getdate() 
--思路:當(dāng)前月的下一月1號(hào)在減1天 
select dateadd(day,-1,dateadd(month,1+datediff(month,'1900-01-01',@date),'1900-01-01')) AS '所在月的最一天' 
select dateadd(month,1+datediff(month,'1900-01-01',@date),'1900-01-01')-1 AS '所在月的最一天' 
--1900-01-01 用0代替 
select dateadd(day,-1,dateadd(month,1+datediff(month,0,@date),0)) AS '所在月的最一天' 
select dateadd(month,1+datediff(month,0,@date),0)-1 AS '所在月的最一天' 
--思路:與月初計(jì)算思路相同 
select dateadd(month,datediff(month,'1989-12-31',@date),'1989-12-31') AS '所在月的最一天' 
--精簡(jiǎn)算法,'1989-12-31' 用-1代替 
select dateadd(month,datediff(month,-1,@date),-1) AS '所在月的最一天' 
--保留時(shí)分秒的算法 
select dateadd(day,-1,dateadd(month,1,dateadd(day,1-datepart(day,@date),@date))) 
go 
--其他月計(jì)算 
--計(jì)算給定日期所在月的上月第一天 
declare @date  datetime 
set @date=getdate() 
--當(dāng)前月第一天減去一個(gè)月 
select dateadd(month,-1,dateadd(month,datediff(month,0,@date),0)) AS '上月第一天' 
--簡(jiǎn)化 
select dateadd(month,datediff(month,0,@date)-1,0) AS '上月第一天' 
--另一種當(dāng)前月第一天算法 
select dateadd(month,-1,dateadd(day,1-datepart(day,@date),@date)) '上月第一天' 
go 
--計(jì)算給定日期所在月的上月最后一天 
declare @date  datetime 
set @date=getdate() 
--當(dāng)前月第一天減去一天 
select dateadd(day,-1,dateadd(month,datediff(month,0,@date),0)) AS '上月最后一天' 
--另一種當(dāng)前月第一天算法 
select dateadd(day,-1,dateadd(day,1-datepart(day,@date),@date)) '上月最后一天' 
select dateadd(day,1-datepart(day,@date),@date)-1 '上月最后一天' 
--另一種算法,不能用當(dāng)前月的最后一天加一個(gè)月,因?yàn)楫?dāng)前月可能是30天。 
--例如 select dateadd(month,1,'2010-06-30') --結(jié)果是2010-07-30而不是2010-07-31, 
--這也是月末算法采用下月第一天減1天計(jì)算的原因 
--但是如果計(jì)算月是31天擇無(wú)此問(wèn)題 
--例如 select dateadd(month,1,'2010-05-31') --結(jié)果是2010-06-30 
--因此下面算法是正確的,-1 表示'1899-12-31 00:00:00.000'-- select CONVERT(datetime,-1)  
select dateadd(month,datediff(month,-1,@date)-1,-1) 
--另一種當(dāng)前月算法 
select dateadd(day,-1,dateadd(day,1-datepart(day,@date),@date)) '上月最后一天' 
--簡(jiǎn)化 
select dateadd(day,0-datepart(day,@date),@date) '上月最后一天' 
go 
--計(jì)算給定日期所在月的下月第一天 
declare @date  datetime 
set @date=getdate() 
--當(dāng)前月第一天加一個(gè)月 
select dateadd(month,1,dateadd(month,datediff(month,0,@date),0)) AS '下月第一天' 
--簡(jiǎn)化 
select dateadd(month,datediff(month,0,@date)+1,0) AS '下月第一天' 
--另一種當(dāng)前月第一天算法 
select dateadd(month,1,dateadd(day,1-datepart(day,@date),@date)) '下月第一天' 
go 
--計(jì)算給定日期所在月的下月最后一天 
declare @date  datetime 
set @date=getdate() 
--當(dāng)前月第一天加2個(gè)月再減去1天 
select dateadd(day,-1,dateadd(month,2,dateadd(month,datediff(month,0,@date),0))) AS '下月最后一天' 
--簡(jiǎn)化 
select dateadd(day,-1,dateadd(month,datediff(month,0,@date)+2,0)) AS '下月最后一天' 
select dateadd(month,datediff(month,0,@date)+2,0)-1 AS '下月最后一天' 
--另一種算法 
select dateadd(month,datediff(month,-1,@date)+1,-1) '下月最后一天' 
--另一種當(dāng)前月第一天算法 
select dateadd(day,-1,dateadd(month,2,dateadd(day,1-datepart(day,@date),@date))) '下月最后一天' 
go 
--所在星期的第一天,計(jì)算給定日期所在星期的第1天(星期日為第一天)  
declare @date  datetime 
set @date= getdate() 
--與SQL Server語(yǔ)言版本相關(guān)的算法 
--思路:當(dāng)前日期+星期日(每周的第1天)與當(dāng)前日期的差的天數(shù) 
--datepart(weekday,DATE)的返回值與@@dateFIRST相關(guān) 
set DATEFIRST 7 -- 或者設(shè)置為美國(guó)英語(yǔ)set LANGUAGE us_english; (星期日為第一天) 
select dateadd(weekday,1-datepart(weekday,@date),@date) AS '所在星期的第一天,星期日' 
--星期日,與SQL Server語(yǔ)言版本或@@dateFIRST無(wú)關(guān) 
--'1989-12-31' 是星期日,'1989-12-31' 再加上(當(dāng)前日期與1989-12-31差的星期數(shù))個(gè)星期 
select dateadd(week,datediff(week,-1,@date),-1) AS '所在星期的星期日' 
--或者 
select dateadd(week,datediff(week,6,@date),6) AS '所在星期的星期日' 
go 
--所在星期的第二天,計(jì)算給定日期所在星期的第2天(星期日為第一天) 
declare @date  datetime 
set @date= getdate() 
--思路:當(dāng)前日期+星期一(每周的第2天)與當(dāng)前日期的差的天數(shù) 
--datepart(weekday,DATE)的返回值與@@dateFIRST相關(guān) 
set DATEFIRST 7 -- 或者設(shè)置為美國(guó)英語(yǔ)set LANGUAGE us_english; (星期日為第一天) 
select dateadd(day,2-datepart(weekday,@date),@date) AS '所在星期的第二天,星期一' 
--星期一,與SQL Server語(yǔ)言版本或@@dateFIRST無(wú)關(guān) 
--'1900-01-01' 是星期一,'1900-01-01' 再加上(當(dāng)前日期與1900-01-01差的星期數(shù))個(gè)星期 
select dateadd(week,datediff(week,0,@date),0) AS '所在星期的星期一' 
go 
--上個(gè)星期第一天,計(jì)算給定日期所在星期的上一個(gè)星期日(星期日為第一天) 
declare @date  datetime 
set @date= getdate() 
--思路:當(dāng)前日志所在星期的星期日再減1周 
--datepart(weekday,DATE)的返回值與@@dateFIRST相關(guān) 
set DATEFIRST 7 -- 或者設(shè)置為美國(guó)英語(yǔ)set LANGUAGE us_english; (星期日為第一天) 
select dateadd(week,-1,dateadd(day,1-datepart(weekday,@date),@date)) AS '上個(gè)星期第一天,星期日' 
--一周等于7天 
select dateadd(day,-7,dateadd(day,1-datepart(weekday,@date),@date)) AS '上個(gè)星期第一天,星期日' 
--簡(jiǎn)化 
select dateadd(day,-6-datepart(weekday,@date),@date) AS '上個(gè)星期第一天,星期日' 
--上個(gè)星期日,與SQL Server語(yǔ)言版本或@@dateFIRST無(wú)關(guān) 
select dateadd(week,-1+datediff(week,-1,@date),-1) AS '上個(gè)星期日' 
--或者 
select dateadd(week,datediff(week,6,@date),-1) AS '上個(gè)星期日' 
go 
--下個(gè)星期第一天,計(jì)算給定日期所在星期的下一個(gè)星期日(星期日為第一天) 
declare @date  datetime 
set @date= getdate() 
--思路:當(dāng)前日志所在星期的星期日再加1周 
--datepart(weekday,DATE)的返回值與@@dateFIRST相關(guān) 
set DATEFIRST 7 -- 或者設(shè)置為美國(guó)英語(yǔ)set LANGUAGE us_english; (星期日為第一天) 
select dateadd(week,1,dateadd(day,1-datepart(weekday,@date),@date)) AS '下個(gè)星期第一天,星期日' 
--一周等于7天 
select dateadd(day,7,dateadd(day,1-datepart(weekday,@date),@date)) AS '下個(gè)星期第一天,星期日' 
--簡(jiǎn)化 
select dateadd(day,8-datepart(weekday,@date),@date) AS '下個(gè)星期第一天,星期日' 
--下個(gè)星期日,與SQL Server語(yǔ)言版本或@@dateFIRST無(wú)關(guān) 
select dateadd(week,1+datediff(week,-1,@date),-1) AS '下個(gè)星期日' 
--或者 
select dateadd(week,datediff(week,-1,@date),6) AS '下個(gè)星期日' 
go 
--判斷給定日期是星期幾 
declare @date  datetime 
set @date= getdate() 
--datepart(weekday,DATE)的返回值與@@dateFIRST相關(guān) 
set DATEFIRST 7 -- 或者設(shè)置為美國(guó)英語(yǔ)set LANGUAGE us_english; (星期日為第一天) 
select datepart(weekday,@date) --返回值 1-星期日,2-星期一,3-星期二......7-星期六 
--上面算法與SQL 語(yǔ)言版本或 @@dateFIRST 相關(guān) 
--下面算法與SQL Server語(yǔ)言版本或@@dateFIRST無(wú)關(guān) 
select datename(weekday,@date) '星期'  
go 
--年度計(jì)算 
declare @date  datetime 
set @date=getdate() 
--年初,計(jì)算給定日期所在年的第一天 
select dateadd(year,datediff(year,0,@date),0) AS '所在年的第一天' 
--年末,計(jì)算給定日期所在年的最后一天 
select dateadd(year,datediff(year,-1,@date),-1) AS '所在年的最后一天' 
--上一年年初,計(jì)算給定日期所在年的上一年的第一天 
select dateadd(year,datediff(year,-0,@date)-1,0) AS '所在年的上一年的第一天' 
--上一年年末,計(jì)算給定日期所在年的上一年的最后一天 
select dateadd(year,datediff(year,0,@date),-1) AS '所在年的上一年的最后一天' 
--下一年年初,計(jì)算給定日期所在年的下一年的第一天 
select dateadd(year,1+datediff(year,0,@date),0) AS '所在年的下一年的第一天' 
--下一年年末,計(jì)算給定日期所在年的下一年的最后一天 
select dateadd(year,1+datediff(year,-1,@date),-1) AS '所在年的下一年的最后一天' 
go 
--季度計(jì)算 
declare @date  datetime 
set @date=getdate() 
--季度初,計(jì)算給定日期所在季度的第一天 
select dateadd(quarter,datediff(quarter,0,@date),0) AS '當(dāng)前季度的第一天' 
--季度末,計(jì)算給定日期所在季度的最后一天 
select dateadd(quarter,1+datediff(quarter,0,@date),-1) AS '當(dāng)前季度的最后一天' 
--上個(gè)季度初 
select dateadd(quarter,datediff(quarter,0,@date)-1,0) AS '當(dāng)前季度的上個(gè)季度初' 
--上個(gè)季度末 
select dateadd(quarter,datediff(quarter,0,@date),-1) AS '當(dāng)前季度的上個(gè)季度末' 
--下個(gè)季度初 
select dateadd(quarter,1+datediff(quarter,0,@date),0) AS '當(dāng)前季度的下個(gè)季度初' 
--下個(gè)季度末 
select dateadd(quarter,2+datediff(quarter,0,@date),-1) AS '當(dāng)前季度的下個(gè)季度末' 
go 
--計(jì)算給定日期所在月的天數(shù) 
declare @date datetime; 
set @date = getdate() 
--本月度第一天與下月度第一天所差的天數(shù) 
select datediff(day,dateadd(month,datediff(month,0,@date),0),dateadd(month,1+datediff(month,0,@date),0)) 
--借助變量簡(jiǎn)化 
select @date = dateadd(month,datediff(month,0,@date),0) --本月度第一天 
select datediff(day,@date,dateadd(month,1,@date)) 
--另一種思路:給定月最后一天的日期,記為本月天數(shù) 
select day(dateadd(month,datediff(month,-1,@date),-1)) 
go 
--計(jì)算給定日期所在季度的天數(shù) 
declare @date datetime; 
set @date = getdate() 
--本季度第一天與下季度第一天所差的天數(shù) 
select datediff(day,dateadd(quarter,datediff(quarter,0,@date),0),dateadd(quarter,1+datediff(quarter,0,@date),0)) 
--借助變量簡(jiǎn)化 
select @date = dateadd(quarter,datediff(quarter,0,@date),0) --本季度第一天 
select datediff(day,@date,dateadd(quarter,1,@date)) 
go 
--計(jì)算給定日期所在年度的天數(shù) 
declare @date datetime; 
set @date = getdate() 
--本年度第一天與下年度第一天所差的天數(shù) 
select datediff(day,dateadd(year,datediff(year,0,@date),0),dateadd(year,1+datediff(year,0,@date),0)) 
--借助變量簡(jiǎn)化 
select @date = dateadd(year,datediff(year,0,@date),0) --本年度第一天 
select datediff(day,@date,dateadd(year,1,@date)) 
go 
--判斷給定日期所在年是否閏年 
--根據(jù)全年總天數(shù)判斷 
declare @date datetime; 
set @date = getdate() 
select CASE datediff(day,dateadd(year,datediff(year,0,@date),0),dateadd(year,1+datediff(year,0,@date),0))  
  WHEN 365 THEN '平年' ELSE '閏年' END  
--根據(jù)二月天數(shù)判斷 
--給日期的上一年最后一天加2個(gè)月,即為當(dāng)年2月最后一天 
select CASE day(dateadd(month,2,dateadd(year,datediff(year,0,@date),-1))) WHEN 28 THEN '平年' ELSE '閏年' END  
go 
--計(jì)算給定日期是當(dāng)年的第幾天 
declare @date datetime; 
set @date = getdate() 
select datepart(dayOFyear,@date) [dayOfyear]; 
select datename(dayOFyear,@date)  [dayOfyear]; 
--另一種思路:當(dāng)前日期與上年最后一天差的天數(shù) 
select datediff(day,dateadd(year,datediff(year,0,@date),-1),@date)[dayOfyear] 
go 
--計(jì)算給定日期是當(dāng)年的第幾周 
declare @date datetime; 
set @date = getdate() 
select datepart(week,@date) [weekOfyear]; --返回int型 
select datename(week,@date) [weekOfyear]; --返回varchar型 
go 
--計(jì)算給定日期是當(dāng)年的第幾月 
declare @date datetime; 
set @date = getdate() 
select datepart(month,@date) [monthOfyear]; --返回int型 
select datename(month,@date) [monthOfyear]; --返回varchar型 
select month(@date) [monthOfyear];--返回int型 
go 
--計(jì)算給定日期是當(dāng)年的第幾季度 
declare @date datetime; 
set @date = getdate() 
select datepart(quarter,@date) [quarterOfyear]; --返回int型 
select datename(quarter,@date) [quarterOfyear]; --返回varchar型 
go 
--計(jì)算給定日期是當(dāng)月的第幾周 
declare @date datetime; 
set @date = getdate() 
--思路,給定日期是當(dāng)年的第幾周-給定日期所在月第一天是當(dāng)年的第幾周 
select datepart(week,@date)-datepart(week,dateadd(month,datediff(month,0,@date),0))+1 [weekOfmonth] 
select datepart(week,@date)-datepart(week,dateadd(day,1-datepart(day,@date),@date))+1 [weekOfmonth] 
go 
--計(jì)算給定日期所在月的第一個(gè)星期一是哪天 
declare @date datetime; 
set @date = getdate() 
--思路,1900-01-01(星期一)加上(給定日志所在月的月6號(hào)與1900-01-01差的周數(shù))個(gè)周 
--為什么不選7號(hào)?如果是7號(hào),那么7好恰好是星期日的話,第一個(gè)周一就會(huì)算到8號(hào)。 
--為什么不選5號(hào)?如果5號(hào)是星期六,那么周一就跑到上月了。小于5號(hào)與這個(gè)道理一樣。 
select dateadd(week,datediff(week,0,dateadd(day,6-datepart(day,@date),@date)),0) '所在月的第一個(gè)星期一' 
select dateadd(week,datediff(week,0,dateadd(day,6-datepart(day,@date),@date)),7) '所在月的第二個(gè)星期一' 
select dateadd(week,datediff(week,0,dateadd(day,6-datepart(day,@date),@date)),1) '所在月的第一個(gè)星期二' 
select dateadd(week,datediff(week,0,dateadd(day,6-datepart(day,@date),@date)),8) '所在月的第二個(gè)星期二' 
go 

SQL Server DATEADD函數(shù)詳解

一、DATEADD函數(shù)簡(jiǎn)介

在SQL Server中,DATEADD函數(shù)用于在日期中添加或減去指定的時(shí)間間隔。這個(gè)函數(shù)能夠處理日期天數(shù)、小時(shí)、分鐘、秒、毫秒等各種單位,返回一個(gè)新日期。

DATEADD函數(shù)的基本用法如下:

DATEADD(datepart,interval,datetime)

其中參數(shù)的解釋如下:

datepart: 需要添加的日期部分,如年(YEAR)、季度(QUARTER)、月(MONTH)、周(WEEK)、天(DAY)、小時(shí)(HOUR)、分鐘(MINUTE)、秒(SECOND)等。

interval: 需要添加的時(shí)間間隔,可以為正數(shù)或負(fù)數(shù)。

datetime: 要進(jìn)行加、減操作的日期。

下面我們將從多個(gè)方面詳細(xì)介紹DATEADD函數(shù)的使用。

二、按不同單位進(jìn)行操作

在DATEADD函數(shù)中,可以根據(jù)需求選擇不同的日期部分。

1、按年進(jìn)行操作:

SELECT DATEADD(YEAR,1,'2019-02-28')

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2020-02-28。

2、按月進(jìn)行操作:

SELECT DATEADD(MONTH,3,'2019-02-28')

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2019-05-28。

3、按日進(jìn)行操作:

SELECT DATEADD(DAY,7,'2019-02-28')

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2019-03-07。

4、按小時(shí)進(jìn)行操作:

SELECT DATEADD(HOUR,2,'2019-02-28 13:45:23')

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2019-02-28 15:45:23。

5、按分鐘進(jìn)行操作:

SELECT DATEADD(MINUTE,15,'2019-02-28 13:45:23')

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2019-02-28 14:00:23。

6、按秒進(jìn)行操作:

SELECT DATEADD(SECOND,30,'2019-02-28 13:45:23')

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2019-02-28 13:45:53。

三、使用變量進(jìn)行操作

在使用DATEADD函數(shù)時(shí),也可以使用變量來(lái)進(jìn)行操作。

DECLARE @startdate DATETIME
    SET @startdate = '2019-02-28 13:45:23'
    SELECT DATEADD(HOUR,2,@startdate)

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2019-02-28 15:45:23。

四、多次操作

在DATEADD函數(shù)中,也可以進(jìn)行多次操作。

SELECT DATEADD(YEAR,1,DATEADD(MONTH,3,DATEADD(DAY,7,'2019-02-28')))

運(yùn)行以上代碼,會(huì)返回一個(gè)新日期:2020-05-07。

五、與其他函數(shù)聯(lián)合使用

在實(shí)際應(yīng)用中,DATEADD函數(shù)還可以與其他的函數(shù)聯(lián)合使用。

1、使用YEAR函數(shù)獲取年份:

SELECT YEAR(DATEADD(YEAR,1,'2019-02-28'))

運(yùn)行以上代碼,會(huì)返回一個(gè)整數(shù):2020。

2、使用DATENAME函數(shù)獲取月份名稱:

SELECT DATENAME(MONTH,DATEADD(MONTH,3,'2019-02-28'))

運(yùn)行以上代碼,會(huì)返回一個(gè)字符串:May。

六、錯(cuò)誤處理

在使用DATEADD函數(shù)時(shí),如果指定的日期部分或時(shí)間間隔不合法,會(huì)出現(xiàn)一些錯(cuò)誤。以下是一些常見(jiàn)的錯(cuò)誤:

1、指定的日期部分不合法:

SELECT DATEADD(test,1,'2019-02-28')

運(yùn)行以上代碼,會(huì)返回一個(gè)錯(cuò)誤:The datepart "test" is not supported by date function dateadd for data type date.

2、指定的時(shí)間間隔為0:

SELECT DATEADD(MONTH,0,'2019-02-28')

運(yùn)行以上代碼,會(huì)返回一個(gè)錯(cuò)誤:The dateadd function requires that the specified interval be nonzero.

3、指定的日期不合法:

SELECT DATEADD(YEAR,1,'2019-02-30')

運(yùn)行以上代碼,會(huì)返回一個(gè)錯(cuò)誤:The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

七、總結(jié)

本文介紹了SQL Server中的DATEADD函數(shù),講解了它的基本用法、按不同單位進(jìn)行操作、使用變量進(jìn)行操作、多次操作、與其他函數(shù)聯(lián)合使用、錯(cuò)誤處理等方面內(nèi)容。使用DATEADD函數(shù)可以很方便地對(duì)日期進(jìn)行操作,提升了SQL Server的數(shù)據(jù)處理能力。

相關(guān)文章

  • sql server中判斷表或臨時(shí)表是否存在的方法

    sql server中判斷表或臨時(shí)表是否存在的方法

    這篇文章主要介紹了sql server中判斷表或臨時(shí)表是否存在的方法,需要的朋友可以參考下
    2015-11-11
  • SQL Server代理:理解SQL代理錯(cuò)誤日志處理方法

    SQL Server代理:理解SQL代理錯(cuò)誤日志處理方法

    SQL Server代理是所有實(shí)時(shí)數(shù)據(jù)庫(kù)的核心,代理有很多不明顯的用法,因此系統(tǒng)的知識(shí),對(duì)于開(kāi)發(fā)人員還是DBA都是有用的,這系列文章會(huì)通俗介紹它的很多用法
    2021-06-06
  • SQL Server 2012  開(kāi)窗函數(shù)

    SQL Server 2012 開(kāi)窗函數(shù)

    這篇文章主要介紹了SQL Server 2012 開(kāi)窗函數(shù)功能的實(shí)例代碼,具體代碼如下所示
    2017-01-01
  • SQL Server 2000中的觸發(fā)器使用

    SQL Server 2000中的觸發(fā)器使用

    觸發(fā)器是數(shù)據(jù)庫(kù)應(yīng)用中的重用工具,它的應(yīng)用很廣泛。這幾天寫(xiě)一個(gè)化學(xué)數(shù)據(jù)統(tǒng)計(jì)方面的軟件,需要根據(jù)采樣,自動(dòng)計(jì)算方差,在這里,我使用了觸發(fā)器。
    2009-09-09
  • having的用法以及與where區(qū)別介紹

    having的用法以及與where區(qū)別介紹

    having子句可以讓我們篩選成組后的各種數(shù)據(jù),having子句在查詢過(guò)程中慢于聚合語(yǔ)句,接下來(lái)通過(guò)實(shí)例介紹下,感興趣的你可以參考下,希望可以幫助到你
    2013-03-03
  • SQL Server索引的原理深入解析

    SQL Server索引的原理深入解析

    實(shí)際上,您可以把索引理解為一種特殊的目錄,下面這篇文章主要給大家介紹了關(guān)于SQL Server索引原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Sql Server觸發(fā)器的使用

    Sql Server觸發(fā)器的使用

    觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,不能被顯式調(diào)用,只能在對(duì)表進(jìn)行insert、update、delete操作時(shí)被自動(dòng)激活。所以觸發(fā)器可以用來(lái)實(shí)現(xiàn)對(duì)表進(jìn)行復(fù)雜的完整性約束
    2012-12-12
  • 使用FORFILES命令來(lái)刪除SQLServer備份的批處理

    使用FORFILES命令來(lái)刪除SQLServer備份的批處理

    利用這些參數(shù)可以構(gòu)造下面的例子來(lái)解決你刪除備份腳本文件的難題。你可以基于更改時(shí)間/日期或者備份類型來(lái)創(chuàng)建腳本。你甚至可以構(gòu)造能夠同時(shí)參照兩種標(biāo)準(zhǔn)的腳本
    2012-05-05
  • 在數(shù)據(jù)庫(kù)‘master’中拒絕CREATE DATABASE權(quán)限問(wèn)題的解決方法

    在數(shù)據(jù)庫(kù)‘master’中拒絕CREATE DATABASE權(quán)限問(wèn)題的解決方法

    今天使用Linq To SQL,要求判斷數(shù)據(jù)庫(kù)是否存在,不存在是自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)。
    2011-10-10
  • SQL Server死鎖問(wèn)題的排查和解決方法

    SQL Server死鎖問(wèn)題的排查和解決方法

    SQL Server死鎖是指兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)操作進(jìn)程在同時(shí)互相持有對(duì)方所需的資源,導(dǎo)致彼此無(wú)法繼續(xù)執(zhí)行下去的情況,本文將給大家介紹SQL Server中怎么排查死鎖問(wèn)題以及解決方法,需要的朋友可以參考下
    2024-05-05

最新評(píng)論