SQL中的高級日期函數(shù)
點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,
設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨
導(dǎo)讀
?
@@DATEFIRST
@@DATEFIRST
@@DATEFIRST就會(huì)返回1。具體如下:
SET?DATEFIRST?1;?--表示星期一為每周第一天
SELECT?@@DATEFIRST;?--返回DATEFIRST的值結(jié)果:

這個(gè)函數(shù)的可能很多人覺得作用不大,其實(shí)對設(shè)置每周的第一天是很重要的。美國是把每周的星球日當(dāng)?shù)谝惶欤覈ǔ0研瞧谝划?dāng)為每周的第一天。
比如我想知道上周第3天的銷量,你就需要先定義上周的星期幾是第1天,才能進(jìn)一步計(jì)算第3天的銷量。
系統(tǒng)時(shí)間
獲取系統(tǒng)時(shí)間有一組函數(shù),常見的有GETDATE函數(shù),此外還有這些函數(shù)。
SELECT?SYSDATETIME()
SELECT?SYSDATETIMEOFFSET()
SELECT?SYSUTCDATETIME()
SELECT?CURRENT_TIMESTAMP??
SELECT?GETDATE()
SELECT?GETUTCDATE()
DATEADD
DATEADD?(datepart?,?number?,?date?)
| datepart | 縮寫 |
|---|---|
| 年 | yy, yyyy |
| 季度 | qq, q |
| 月 | mm, m |
| 年中的日 | dy, y |
| 日 | dd, d |
| 周 | wk, ww |
| 星期 | dw, w |
| 小時(shí) | hh |
| 分鐘 | mi, n |
| 秒 | ss, s |
| 毫秒 | ms |
| 微妙 | mcs |
| 納秒 | ns |
SELECT?DATEADD(month,?-1,?'20211208');
SELECT?DATEADD(month,?1,?'20211208');
DATEDIFF?(?datepart?,?startdate?,?enddate?)
SELECT?DATEDIFF(DAY,'20200101','20211208')
DATEFROMPARTS
DATEFROMPARTS?(?year,?month,?day?)
DATEFROMPARTS 返回一個(gè) date 值,其中日期部分設(shè)置為指定的年、月和日,時(shí)間部分設(shè)置為默認(rèn)值 。?對于無效參數(shù),DATEFROMPARTS 將引發(fā)錯(cuò)誤。?如果至少有一個(gè)必需參數(shù)具有 NULL 值,則 DATEFROMPARTS 返回 NULL。 此函數(shù)可在 SQL Server 2012 (11.x)?及更高版本的服務(wù)器上執(zhí)行遠(yuǎn)程處理。?它不能無法在版本低于 SQL Server 2012 (11.x)?的服務(wù)器上執(zhí)行遠(yuǎn)程處理。
SELECT?DATEFROMPARTS?(?2021,?12,?8?)?AS?Result;
DATENAME
DATENAME?(?datepart?,?date?)
SELECT?DATENAME(year,?getdate())?'Year'?
????,DATENAME(month,?getdate())?'Month'
????,DATENAME(day,?getdate())?'Day'
????,DATENAME(weekday,getdate())?'Weekday';
DATEPART
DATEPART?(?datepart?,?date?)
SELECT?DATEPART(year,?getdate())?'Year'?
????,DATEPART(month,?getdate())?'Month'
????,DATEPART(day,?getdate())?'Day'
????,DATEPART(weekday,getdate())?'Weekday';
EOMONTH
EOMONTH?(?start_date?[,?month_to_add?]?)
--定義一個(gè)日期類型的變量,并且給它賦值20211208
DECLARE?@date?DATETIME =?'20211208';
SELECT?EOMONTH?( @date?)?AS?Result;
GO
DECLARE?@date?DATETIME =?'20211208';
SELECT?EOMONTH?( @date,1?)?AS?Result;
GO
ISDATE?(?expression?)
IF ISDATE('2021-12-08') = 1
????SELECT?'合法日期'?Result?
ELSE??
????SELECT?'不合法日期'?Result;
SELECT???DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
--2021-12-01 00:00:00.000SELECT???DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
--2021-12-06?00:00:00.0003、今年第一天
SELECT?DATEADD(yy,DATEDIFF(yy,0,getdate()),0)
--2021-01-01 00:00:00.0004、下個(gè)季度第一天
SELECT???DATEADD(qq,DATEDIFF(qq,-1,getdate()),0)
--2021-01-01 00:00:00.0005、上個(gè)月最后一天
SELECT?DATEADD(dd,-DAY(getdate()),getdate())
--2021-11-30 20:14:21.8506、今年最后一天
SELECT?DATEADD(year,DATEDIFF(year,0,DATEADD(year,1,getdate())),-1)
--2021-12-31 00:00:00.0007、去年同一天
SELECT?DATEADD(YEAR,-1,GETDATE())
--2020-12-08 20:19:05.987以上就是今天要給大家介紹的高級日期函數(shù),覺得不錯(cuò),記得轉(zhuǎn)發(fā)分享給更多人,謝謝啦~
最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》和《SQL高級知識第二版》的PDF電子版。里面有各個(gè)語法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來實(shí)操。
有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行
數(shù)據(jù)前線
后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群
推薦閱讀

