【美高梅在线登录网址】SQL Server日期相关知识

对于开垦人士来讲,日期管理恐怕简单,可能很难。结合自身过往的付出阅历并结合网络的事例,总括出一些日子相关的操作,供本身备用及为我们大饱眼福:注意:全部系统日期和岁月值均得自运行SQLServer实例的微电脑的操作系统。每后生可畏种日期类型有其应用范围,当然以无独有偶适用为最棒接纳,切记不要为了方便,什么都用datetime类型。从性质方面会有相当大影响,举个例证:一个表,有1亿行的数据,有10曼海姆期型。假使一切接受datetime,那么光那有个别的贮存空间正是:10*100000000*8字节/(1024*1024卡塔尔≈7629M≈7.4G,当然,如若有像这种类型的急需,再大也依然要用的,假如其实业务上不须要那么标准,只要求规范到1分钟就可以,那么不暇思索使用smalldatetime,能够减去一半的上空,也等于大意3.7G。减少空间的裨益有过多,譬如备份及数据库文件的大小能够减小,让有限的预算做越多的事体。何况数量页固定8KB,越少的体积单页能寄放的数据也就更加多,查询时要访谈的页面就越来越少,缓慢解决I/O压力。同时对索引的应用也更有效,等等。所以这里就能够体现出“设计”的重大。常用日期管理案例:那是小说的重视,因为地点当先百分之五十剧情都能够从同步丛书中查到给定有个别日期,总计有关的值,近些日子作者的干活中相见超多的正是这几个,至于有个别十分历法所需日期,近期没碰着,所以没计算:--定义给定的一天DECLARE@DateDATETIME=GETDATE(卡塔尔(قطر‎;SELECT@DateAS'目今日子',DATEADD(DD,-1,@Date卡塔尔AS'前一天',DATEADD(DD,1,@Date卡塔尔国AS'后一天'/*月计算*/,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date卡塔尔,0卡塔尔AS'月尾'--在SQLServer中0代表一九〇三-01-01,通过月运算,保险日长久为1号,DATEADD(DD,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date卡塔尔国,0卡塔尔国卡塔尔AS'月末(正确到天State of Qatar'--找到前段时期首再扣减1天,建议使用DATEADD而毫无直接“-1”,DATEADD(SS,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date卡塔尔,0卡塔尔卡塔尔AS'月末(准确到datetime的小数位卡塔尔',DATEADD(MONTH,DATEDIFF(MONTH,0,@Date卡塔尔(قطر‎-1,0卡塔尔(قطر‎AS'前段时期中后天',DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@DateState of Qatar,@Date卡塔尔国卡塔尔(قطر‎AS'下二个月最终一天',DATEADD(MONTH,DATEDIFF(MONTH,0,@Date卡塔尔(قطر‎+1,0卡塔尔AS'前些日子初后天',DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date卡塔尔,@Date卡塔尔国卡塔尔国卡塔尔(قطر‎AS'后一个月最终一天'/*周计算*/,DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date卡塔尔,@Date卡塔尔国AS'本周先是天(星期天卡塔尔国'--注意此处与@@datefirst的值有关,DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date卡塔尔,-1卡塔尔(قطر‎AS'所在星期的星期日'--注意此处与@@datefirst的值有关,DATEADD(DAY,2-DATEPART(WEEKDAY,@DateState of Qatar,@Date卡塔尔AS'所在星期的第二天'--注意此处与@@datefirst的值有关,别的天数类推,DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date卡塔尔(قطر‎,@DateState of QatarState of QatarAS'上个星期第一天(星期日卡塔尔'--注意此处与@@datefirst的值有关,DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date卡塔尔(قطر‎,@Date卡塔尔国卡塔尔AS'下个星期第一天(周六卡塔尔(قطر‎'--注意此处与@@datefirst的值有关,DATENAME(WEEKDAY,@Date卡塔尔(قطر‎AS'本日是周几',DATEPART(WEEKDAY,@Date卡塔尔AS'本日是周几'--重返值1-周天,2-周四,3-礼拜风华正茂......7-周天/*寒暑总计*/,DATEADD(YEARubicon,DATEDIFF(YEAGL450,0,@Date卡塔尔,0卡塔尔AS'年终',DATEADD(YEAOdyssey,DATEDIFF(YEATucson,-1,@Date卡塔尔,-1卡塔尔AS'年末',DATEADD(YEA智跑,DATEDIFF(YEAXC60,-0,@Date卡塔尔-1,0卡塔尔国AS'二零一八年年底',DATEADD(YEA索罗德,DATEDIFF(YEALAND,-0,@DateState of Qatar,-1State of QatarAS'二零一八年年末',DATEADD(YEAPRADO,1+DATEDIFF(YEALX570,0,@DateState of Qatar,0卡塔尔AS'早些年年终',DATEADD(YEA奇骏,1+DATEDIFF(YEAEnclave,-1,@DateState of Qatar,-1卡塔尔国AS'二〇黄金时代四年年末'/*季度计算*/,DATEADD(QUARTE宝马X3,DATEDIFF(QUARTEEvoque,0,@Date卡塔尔,0State of QatarAS'本季季初',DATEADD(QUARTEPAJERO,1+DATEDIFF(QUARTESportage,0,@Date卡塔尔国,-1State of QatarAS'本季季末',DATEADD(QUARTE汉兰达,DATEDIFF(QUARTE兰德Sportage,0,@Date卡塔尔国-1,0State of QatarAS'上季季初',DATEADD(QUARTEEvoque,DATEDIFF(QUARTE哈弗,0,@DateState of Qatar,-1卡塔尔(قطر‎AS'上季季末',DATEADD(QUARTEHaval,1+DATEDIFF(QUARTE福睿斯,0,@Date卡塔尔,0卡塔尔(قطر‎AS'下季季初',DATEADD(QUARTE卡宴,2+DATEDIFF(QUARTELacrosse,0,@Date卡塔尔国,-1卡塔尔AS'下季季末'建议:创制时间维度表:在本人早前专门的工作中,平常须求查询时限,当时,可以成立多个表,每意气风发行对应一天,然后其余列正是所需日期,例如季初季末、月尾月末、年底年初竟是前年前一年等。以供直接调用,何况就算存10年的数据,也就3000多条。有这么必要的能够伪造动用。速查手册:日期往往要调换来字符型再拓宽拍卖,所以这里贴出部分退换结果SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔,0卡塔尔(قطر‎--0516二零零六10:57AMSelectCONVERT(varchar(100卡塔尔,GETDATE(卡塔尔国,1卡塔尔(قطر‎--05/16/06SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔(قطر‎,2卡塔尔--06.05.16SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔,3卡塔尔国--16/05/06SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔(قطر‎,4卡塔尔国--16.05.06SelectCONVERT(varchar(100State of Qatar,GETDATE(卡塔尔,5卡塔尔国--16-05-06SelectCONVERT(varchar(100State of Qatar,GETDATE(卡塔尔,6卡塔尔国--160506SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(卡塔尔(قطر‎,7卡塔尔--0516,06SelectCONVERT(varchar(100卡塔尔,GETDATE(卡塔尔国,8卡塔尔(قطر‎--10:57:46SelectCONVERT(varchar(100State of Qatar,GETDATE(卡塔尔国,9卡塔尔国--0516二〇〇六10:57:46:827AMSelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(State of Qatar,10卡塔尔国--05-16-06SelectCONVERT(varchar(100卡塔尔国,GETDATE(),11卡塔尔--06/05/16SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(卡塔尔,12卡塔尔--060516SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(State of Qatar,13卡塔尔(قطر‎--1605二零零七10:57:46:937SelectCONVERT(varchar(100卡塔尔,GETDATE(卡塔尔(قطر‎,14卡塔尔国--10:57:46:967SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔国,20卡塔尔国--二〇〇五-05-1610:57:47SelectCONVERT(varchar(100卡塔尔,GETDATE(State of Qatar,21卡塔尔(قطر‎--二〇〇五-05-1610:57:47.157SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(State of Qatar,22卡塔尔国--05/16/0610:57:47AMSelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔(قطر‎,23卡塔尔(قطر‎--二零零五-05-16SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔,24卡塔尔(قطر‎--10:57:47SelectCONVERT(varchar(100卡塔尔国,GETDATE(),25卡塔尔--2005-05-1610:57:47.250SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔(قطر‎,100卡塔尔国--0516二〇〇五10:57AMSelectCONVERT(varchar(100State of Qatar,GETDATE(State of Qatar,101卡塔尔--05/16/2005SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔(قطر‎,102卡塔尔(قطر‎--二零零七.05.16SelectCONVERT(varchar(100卡塔尔,GETDATE(卡塔尔,103卡塔尔(قطر‎--16/05/二零零七SelectCONVERT(varchar(100卡塔尔,GETDATE(State of Qatar,104卡塔尔--16.05.二零零五SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔(قطر‎,105State of Qatar--16-05-二零零五SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(卡塔尔,106卡塔尔--16052005SelectCONVERT(varchar(100卡塔尔,GETDATE(卡塔尔国,107State of Qatar--0516,二零零六SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(卡塔尔(قطر‎,108卡塔尔--10:57:49SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(卡塔尔国,109卡塔尔(قطر‎--0516200710:57:49:437AMSelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(State of Qatar,110卡塔尔(قطر‎--05-16-2006SelectCONVERT(varchar(100State of Qatar,GETDATE(卡塔尔(قطر‎,111State of Qatar--贰零零陆/05/16SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔,112卡塔尔(قطر‎--20070516SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔国,113卡塔尔(قطر‎--1605贰零零柒10:57:49:513SelectCONVERT(varchar(100State of Qatar,GETDATE(State of Qatar,114卡塔尔--10:57:49:547SelectCONVERT(varchar(100卡塔尔国,GETDATE(卡塔尔,120State of Qatar--二〇〇七-05-1610:57:49SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(State of Qatar,121State of Qatar--二〇〇七-05-1610:57:49.700SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(卡塔尔国,126卡塔尔国--二零零七-05-16T10:57:49.827SelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(卡塔尔(قطر‎,130卡塔尔(قطر‎--18??????????142710:57:49:907AMSelectCONVERT(varchar(100卡塔尔(قطر‎,GETDATE(State of Qatar,131卡塔尔国--18/04/142710:57:49:920AM

--月尾,总结给定日期所在月的首后天
--那么些总结的手艺是先总计当明日期到"1904-01-01"的时光间距数,然后把它加到"一九零三-01-01"上来赢得非常的日期
--这一个本领能够用来计量很多两样的日期
DECLARE @Date  DATETIME
SET @Date=GETDATE()
SELECT DATEADD(MONTH,DATEDIFF(MONTH,'1900-01-01',@Date),'1900-01-01') AS '所在月的率后天'
--精短算法,依据SQL Server的时光代表方法能够,'1904-01-01' 能够用0代替
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) AS '所在月的第一天'
--上边三种算法正确到天时转手均为00:00:00.000
--上面算法课以保留时分秒
--思路:用给定日期减去月第一天与给定日期差的造化
SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)
GO

select DATEPART(YYYY,GETDATE()) --2017

--季度总结
DECLARE @Date  DATETIME
SET @Date=GETDATE()
--季度初,总括给定日期所在季度的率后天
SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS '当前季度的首后天'
--季度末,总括给定日期所在季度的最后一天
SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的末段一天'
--上个季度初
SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS '当前季度的上个季度初'
--上个季度末
SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的上个季度末'
--下个季度初
SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS '当前季度的下个季度初'
--下个季度末
SELECT DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的下个季度末'
GO
--总括给定日期所在月的小运
DECLARE @Date DATETIME; 
SET @Date = GETDATE()
--前些日子度第一天与后一个月度第一天所差的运气
SELECT DATEDIFF(DAY,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0),DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0))
--依附变量简化
SELECT @Date = DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)
--上一个月度第一天
SELECT DATEDIFF(DAY,@Date,DATEADD(MONTH,1,@Date))
--另生龙活虎种思路:给定月最终一天的日期,记为前段时期命局
SELECT DAY(DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1))
GO
--总结给定日期所在季度的大运
DECLARE @Date DATETIME; SET @Date = GETDATE()
--上一年第一天与下半年第一天所差的运气
SELECT DATEDIFF(DAY,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0),DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0))
--依据变量简化
SELECT @Date = DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0)
--上一年第一天
SELECT DATEDIFF(DAY,@Date,DATEADD(QUARTER,1,@Date))
GO
--计算给定日期所在年度的气数
DECLARE @Date DATETIME; SET @Date = GETDATE()
--今年度第一天与今年度第一天所差的天数
SELECT DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0),DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0))
--依附变量简化
SELECT @Date = DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0)
--下半年度第一天
SELECT DATEDIFF(DAY,@Date,DATEADD(YEAR,1,@Date))
GO
--判别给定日期所在年是不是闰年
--依照全年总天数决断
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
--遵照四月天数决断
--给日期的上后生可畏季度最终一天加2个月,即为当年十二月最后一天
SELECT
CASE DAY(DATEADD(MONTH,2,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1)))
WHEN 28 THEN '平年'
ELSE '闰年'
END
GO
--计算给定日期是那时候的第几天
DECLARE @Date DATETIME; SET @Date = GETDATE()
SELECT DATEPART(DAYOFYEAR,@Date) [DayOfYear]
SELECT DATENAME(DAYOFYEAR,@Date) [DayOfYear]
--另生龙活虎种思路:当今天子与二〇一八年最终一天差的天数
SELECT DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1),@Date) [DayOfYear]
GO --总括给定日期是那时候的第几周
DECLARE @Date DATETIME
SET @Date = GETDATE()
SELECT DATEPART(WEEK,@Date) [WeekOfYear]--返回int型
SELECT DATENAME(WEEK,@Date) [WeekOfYear]--返回varchar型
GO
--总计给定日期是这时的第几月
DECLARE @Date DATETIME
SET @Date = GETDATE() SELECT DATEPART(MONTH,@Date) [MonthOfYear]--返回int型
SELECT DATENAME(MONTH,@Date) [MonthOfYear] --返回varchar型
SELECT MONTH(@Date) [MonthOfYear] --返回int型
GO
--总结给定日期是那儿的第几季度
DECLARE @Date DATETIME
SET @Date = GETDATE() SELECT DATEPART(QUARTER,@Date) [QuarterOfYear] --返回int型
SELECT DATENAME(QUARTER,@Date) [QuarterOfYear] --返回varchar型 
GO 
--总括给定日期是后一个月的第几周 
DECLARE @Date DATETIME
SET @Date = GETDATE() 
--思路,给定日期是当下的第几周-给定日期所在月第一天是当场的第几周 
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 
--总结给定日期所在月的第一个周二是曾几何时 
DECLARE @Date DATETIME
SET @Date = GETDATE() 
--思路,一九〇二-01-01(周生机勃勃卡塔尔国加上(给定日志所在月的月6号与一九零零-01-01差的周数State of Qatar个周
--为何不选7号?就算是7号,那么7好无独有偶是周天的话,第2个周意气风发就能算到8号。
--为何不选5号?如若5号是星期天,那么周大器晚成就跑到上月了。小于5号与那一个道理同样。
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date卡塔尔(قطر‎卡塔尔(قطر‎,0卡塔尔国 '所在月的率先个礼拜风华正茂' 
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@DateState of QatarState of Qatar,7State of Qatar '所在月的第二个星期五' 
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date卡塔尔(قطر‎卡塔尔国,1卡塔尔国 '所在月的首先个礼拜一' 
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,DATEADD(DAY,6-DATEPART(DAY,@Date),@Date卡塔尔国State of Qatar,8卡塔尔国 '所在月的第二个周五'
GO

                         date 正是光阴;

--总括给定日期所在月的下个月率后天
DECLARE @Date  DATETIME
SET @Date=GETDATE()
--当前月先是天加一个月
SELECT DATEADD(MONTH,1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS '前段日子率后天'
--简化
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0) AS '上个月先是天'
--另生机勃勃种当前月第一天算法
SELECT DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@DateState of Qatar卡塔尔(قطر‎ '上一个月尾后天'
GO

7.日期相关函数收拾:

--所在星期的率先天,总括给定日期所在星期的第1天(礼拜天为率后天卡塔尔国
DECLARE @Date  DATETIME
SET @Date= GETDATE()
--与SQL Server语言版本相关的算法
--思路:当今天期+星期六(每一周的第1天卡塔尔国与眼今天子的差的运气
--DATEPART(WEEKDAY,DATE卡塔尔(قطر‎的重临值与@@DATEFIRubiconST相关
SET DATEFI索罗德ST 7 -- 恐怕设置为United States菲律宾语SET LANGUAGE us_english; (周六为率后天State of Qatar
SELECT DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS '所在星期的首后天,礼拜日'
--周日,与SQL Server语言版本或@@DATEFI奥德赛ST非亲非故
--'壹玖玖零-12-31' 是周六,'一九八七-12-31' 再拉长(当前天子与一九九〇-12-31差的星期数卡塔尔(قطر‎个星期
SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS '所在星期的星期日'
--或者
SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),6) AS '所在星期的周天'
GO

DATENAME:参数为两个,取值区间 interval 和岁月 date

--月末,总括给定日期所在月的末段一天
DECLARE @Date  DATETIME
SET @Date=GETDATE()
--思路:当前月的下四月1号在减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 '所在月的最一天'
--思路:与月尾总计思路相近
SELECT DATEADD(MONTH,DATEDIFF(MONTH,'1989-12-31',@Date),'1989-12-31') AS '所在月的最一天'
--洗练算法,'壹玖捌柒-12-31' 用-1代替
SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1) AS '所在月的最一天'
--保留时分秒的算法
SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)))
GO

        最后的 date_style 可以有 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,100,

--别的月总结
--总括给定日期所在月的下一个月先是天
DECLARE @Date  DATETIME
SET @Date=GETDATE()
--当前月第一天减去一个月
SELECT DATEADD(MONTH,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS '上个月底后天'
--简化
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS '下贰个月第一天'
--另意气风发种当前月第一天算法
SELECT DATEADD(MONTH,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@DateState of QatarState of Qatar '上个月先是天'
GO

4.获得当今日子 --07或7

--年度总计
DECLARE @Date  DATETIME
SET @Date=GETDATE()
--年终,计算给定日期所在年的第一天
SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS '所在年的率先天'
--年末,计算给定日期所在年的结尾一天
SELECT DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS '所在年的最后一天'
--上一季度新禧,计算给定日期所在年的下5个月的首后天
SELECT DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS '所在年的那风流倜傥季度的第一天'
--那生机勃勃季度年末,计算给定日期所在年的下生机勃勃季度的终极一天
SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1) AS '所在年的今年的末尾一天'
--下一季度开春,总括给定日期所在年的下半年的首后天
SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS '所在年的下季度的首后天'
--后一年年末,计算给定日期所在年的后一年的结尾一天
SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS '所在年的下年的最后一天'
GO

                        select CONVERT(varchar,GETDATE(),20)  --2017-05-12 17:22:22
                        select CONVERT(varchar,GETDATE(),23)  --2017-05-12
                        select CONVERT(varchar,GETDATE(),24)  --17:23:42
                        select CONVERT(varchar,GETDATE(),102) --2017.05.12
                        select CONVERT(varchar,GETDATE(),111) --2017/05/12
                        select CONVERT(varchar,GETDATE(),112) --20170512

--下个星期第一天,计算给定日期所在星期的下二个周末(星期六为第一天State of Qatar
DECLARE @Date  DATETIME
SET @Date= GETDATE()
--思路:当前日记所在星期的星期日再加1周
--DATEPART(WEEKDAY,DATEState of Qatar的重临值与@@DATEFIPanameraST相关
SET DATEFITiguanST 7 -- 依旧安装为U.S.A.立陶宛共和国语SET LANGUAGE us_english; (周日为第一天卡塔尔国
SELECT DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '下个星期第一天,星期六'
--二十八日也就是7天
SELECT DATEADD(DAY,7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '下个星期第一天,礼拜日'
--简化
SELECT DATEADD(DAY,8-DATEPART(WEEKDAY,@Date),@Date) AS '下个星期第一天,周日'
--下个周天,与SQL Server语言版本或@@DATEFI福特ExplorerST毫无干系
SELECT DATEADD(WEEK,1+DATEDIFF(WEEK,-1,@Date),-1) AS '下个星期日'
--或者
SELECT DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),6) AS '下个周日'
GO

select YEAR(GETDATE())--2017

--总括给定日期所在月的后一个月最终一天
DECLARE @Date  DATETIME
SET @Date=GETDATE()
--当前月先是天加2个月再减去1天
SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0))) AS '本月最后一天'
--简化
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)'前段时期最后一天'
--另大器晚成种当前月第一天算法
SELECT DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date),@DateState of Qatar卡塔尔卡塔尔 '前些日子最后一天'
GO

CONVERT 函数转变格式:首要注意第3个参数 date_style ;格式:select CONVERT(varchar,GETDATE(),0)

--上个星期第一天,总括给定日期所在星期的上贰个礼拜天(周日为率后天State of Qatar
DECLARE @Date  DATETIME
SET @Date= GETDATE()
--思路:超过天记所在星期的周六再减1周
--DATEPART(WEEKDAY,DATE卡塔尔(قطر‎的重回值与@@DATEFIKugaST相关
SET DATEFI奥迪Q5ST 7 -- 大概设置为美利坚联邦合众国斯洛伐克共和国语SET LANGUAGE us_english; (周末为第一天卡塔尔
SELECT DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '上个星期第一天,星期天'
--七日也便是7天
SELECT DATEADD(DAY,-7,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '上个星期第一天,星期日'
--简化
SELECT DATEADD(DAY,-6-DATEPART(WEEKDAY,@Date),@Date) AS '上个星期第一天,周末'
--上个星期六,与SQL Server语言版本或@@DATEFI奥迪Q3ST非亲非故
SELECT DATEADD(WEEK,-1+DATEDIFF(WEEK,-1,@Date),-1) AS '上个星期天'
--或者
SELECT DATEADD(WEEK,DATEDIFF(WEEK,6,@Date),-1) AS '上个星期日'
GO

select CONVERT(varchar(8),GETDATE(),112) --20170512

--所在星期的第二天,计算给定日期所在星期的第2天(星期日为率后天卡塔尔(قطر‎
DECLARE @Date  DATETIME
SET @Date= GETDATE()
--思路:当前不久子+星期四(每一周的第2天卡塔尔(قطر‎与当前不久期的差的运气
--DATEPART(WEEKDAY,DATE卡塔尔的再次来到值与@@DATEFIKoleosST相关
SET DATEFI帕JeroST 7 -- 要么安装为美利坚合众国塞尔维亚语SET LANGUAGE us_english; (周末为第一天卡塔尔
SELECT DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS '所在星期的第二天,周四'
--星期三,与SQL Server语言版本或@@DATEFILANDST无关
--'一九零零-01-01' 是星期五,'一九零五-01-01' 再增进(当今日子与一九〇五-01-01差的星期数卡塔尔国个礼拜
SELECT DATEADD(WEEK,DATEDIFF(WEEK,0,@Date),0) AS '所在星期的礼拜二'
GO

2. 得到当二〇风流倜傥四年  --2017

--计算给定日期所在月的上一个月最后一天
DECLARE @Date  DATETIME
SET @Date=GETDATE()
--当前月初先天减去一天
SELECT DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)) AS '过阵子最终一天'
--另风度翩翩种当前月第一天算法
SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date卡塔尔卡塔尔 '下一个月最后一天'
SELECT DATEADD(DAY,1-DATEPART(DAY,@Date),@Date卡塔尔(قطر‎-1 '前贰个月最后一天'
--另生龙活虎种算法,不能用当前月的终极一天加一个月,因为近期月大概是30天。
--例如 SELECT DATEADD(MONTH,1,'2010-06-30') --结果是2010-07-30而不是2010-07-31,
--那也是月末算法接收前些时间第一天减1天计算的来头
--不过借使计算月是31天择无此主题材料
--例如 SELECT DATEADD(MONTH,1,'2010-05-31') --结果是2010-06-30
--因而上边算法是不利的,-1 代表'1899-12-31 00:00:00.000'-- SELECT CONVERT(DATETIME,-1State of Qatar
SELECT DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date)-1,-1)
--另生龙活虎种当前月算法
SELECT DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@DateState of Qatar卡塔尔国 '下一个月最后一天'
--简化
SELECT DATEADD(DAY,0-DATEPART(DAY,@Date),@DateState of Qatar '下一个月最后一天'
GO

6.赢妥当二零大器晚成八年月日 --20170512

DECLARE @Date  DATETIME
SET @Date=GETDATE()
--前一天,给定日期的后天
SELECT DATEADD(DAY,-1,@Date) AS '前一天'
--后一天,给定日期的后一天
SELECT DATEADD(DAY,1,@Date) AS '后一天'
GO

GETDATE() :获取当前光阴,时间格式暗中认可。

--决断给定日期是星期几
DECLARE @Date  DATETIME
SET @Date= GETDATE()
--DATEPART(WEEKDAY,DATE卡塔尔(قطر‎的重临值与@@DATEFI中华VST相关
SET DATEFI汉兰达ST 7 -- 要么设置为美利坚联邦合众国俄文SET LANGUAGE us_english; (星期六为率后天卡塔尔
SELECT DATEPART(WEEKDAY,@Date) --返回值 1-星期日,2-星期一,3-星期二......7-星期六
--上边算法与SQL 语言版本或 @@DATEFI本田CR-VST 相关
--下边算法与SQL Server语言版本或@@DATEFI普拉多ST无关
SELECT DATENAME(WEEKDAY,@Date) '星期'
GO

               常用的 20,23,24,102,111,112,120等;