<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL中的高級日期函數(shù)

          共 4653字,需瀏覽 10分鐘

           ·

          2021-12-14 00:36

          點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨

          SQL專欄

          SQL基礎(chǔ)知識第二版
          SQL高級知識第二版

          導(dǎo)讀

          ?
          我們在工作中時(shí)常需要處理某個(gè)時(shí)間段的數(shù)據(jù),例如:
          如何求解上周的銷量?
          如何求解上月第一天的銷售金額?
          如何求解去年同期的在線人數(shù)?
          ......
          這些都是涉及到具體或者以當(dāng)前為參照的時(shí)間段的數(shù)據(jù)。 我們該如何從海量數(shù)據(jù)中找出準(zhǔn)確的時(shí)間段呢?


          平常我們在計(jì)算時(shí)間或推算日期時(shí)都會(huì)用到一些日期函數(shù),大多都是些比較常見的,比如YEAR(),MONTH(),DATEADD()等等,今天給大家講解一些比較高級的日期函數(shù)。

          測試環(huán)境
          SQL Server 2017

          @@DATEFIRST

          作用
          針對特定會(huì)話,此函數(shù)返回?SET DATEFIRST?的當(dāng)前值。

          語法
          @@DATEFIRST

          注意:
          SET DATEFIRST n 指定一周的第一天(星期日、星期一、星期二等) 。?n 值的范圍為 1 到 7 。

          示例
          比如我們指定星期天為每周第一天,那么今天(2021-12-08)的

          @@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()

          結(jié)果:

          其中包含UTC的系統(tǒng)時(shí)間是世界標(biāo)準(zhǔn)時(shí)間,其他為當(dāng)前時(shí)區(qū)時(shí)間。
          注意:CURRENT_TIMESTAMP與GETDATE()函數(shù)等價(jià)。


          DATEADD

          作用
          將指定的 number 值(作為帶符號整數(shù))與輸入 date 值的指定 datepart 相加,然后返回該修改值 。

          語法
          DATEADD?(datepart?,?number?,?date?)
          其中datepart參數(shù)由系統(tǒng)定義,具體參數(shù)列表如下:
          datepart縮寫
          yy, yyyy
          季度qq, q
          mm, m
          年中的日dy, y
          dd, d
          wk, ww
          星期dw, w
          小時(shí)hh
          分鐘mi, n
          ss, s
          毫秒ms
          微妙mcs
          納秒ns


          示例
          查詢上個(gè)月的今天,下個(gè)月的今天


          SELECT?DATEADD(month,?-1,?'20211208');
          SELECT?DATEADD(month,?1,?'20211208');


          結(jié)果:



          DATEDIFF
          作用
          返回指定的 startdate 和 enddate 之間所跨的指定 datepart 邊界的計(jì)數(shù)(作為帶符號整數(shù)值) 。

          語法
          DATEDIFF?(?datepart?,?startdate?,?enddate?)
          注意:返回值為startdate 與 enddate 之間的 int 差異,以 datepart 設(shè)置的邊界表示 。

          示例
          計(jì)算去年第一天到今天之間有多少天


          SELECT?DATEDIFF(DAY,'20200101','20211208')


          結(jié)果:



          DATEFROMPARTS

          作用
          此函數(shù)返回映射到指定年、月、日值的 date 值 。

          語法
          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;


          結(jié)果


          DATENAME

          作用
          返回表示指定 date 的指定 datepart 的字符串。

          語法
          DATENAME?(?datepart?,?date?)
          示例


          SELECT?DATENAME(year,?getdate())?'Year'?
          ????,DATENAME(month,?getdate())?'Month'
          ????,DATENAME(day,?getdate())?'Day'
          ????,DATENAME(weekday,getdate())?'Weekday';


          結(jié)果:

          通過此函數(shù),我們可以知道具體某一天的年月日星期等具體信息。特別是在進(jìn)行數(shù)據(jù)分組統(tǒng)計(jì)時(shí)經(jīng)常用到。

          DATEPART

          作用
          返回表示指定 date 的指定 datepart 的整數(shù)。

          語法
          DATEPART?(?datepart?,?date?)
          示例


          SELECT?DATEPART(year,?getdate())?'Year'?
          ????,DATEPART(month,?getdate())?'Month'
          ????,DATEPART(day,?getdate())?'Day'
          ????,DATEPART(weekday,getdate())?'Weekday';


          結(jié)果:


          細(xì)心的同學(xué)可能發(fā)現(xiàn)DATEPART和DATENAME有很多相似之處,但是請注意他們返回的類型是不同的,DATEPART返回的是數(shù)值類型,DATENAME返回的是字符串類型。

          EOMONTH

          作用
          返回包含指定日期所在月份的最后一天(具有可選偏移量)

          語法
          EOMONTH?(?start_date?[,?month_to_add?]?)

          示例
          顯示本月的最后一天


          --定義一個(gè)日期類型的變量,并且給它賦值20211208
          DECLARE?@date?DATETIME =?'20211208';
          SELECT?EOMONTH?( @date?)?AS?Result;
          GO


          結(jié)果


          添加偏移參數(shù)month_to_add
          例如返回下月的最后一天:


          DECLARE?@date?DATETIME =?'20211208';
          SELECT?EOMONTH?( @date,1?)?AS?Result;
          GO


          結(jié)果:


          ISDATE
          作用
          如果表達(dá)式是有效的 date、time、或 datetime 值,則返回 1;否則返回 0 。
          如果表達(dá)式為 datetime2 值,則 ISDATE 返回 0 。

          語法
          ISDATE?(?expression?)
          示例
          判斷今天(2021-12-08)是否為合法日期


          IF ISDATE('2021-12-08') = 1
          ????SELECT?'合法日期'?Result?
          ELSE??
          ????SELECT?'不合法日期'?Result;


          結(jié)果:

          有興趣的同學(xué)可以嘗試判斷'2022-02-30'是否合法。

          實(shí)戰(zhàn)應(yīng)用
          1、本月第一天
          SELECT???DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
          --2021-12-01 00:00:00.000


          2、本周星期一
          SELECT???DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
          --2021-12-06?00:00:00.000


          3、今年第一天

          SELECT?DATEADD(yy,DATEDIFF(yy,0,getdate()),0)
          --2021-01-01 00:00:00.000


          4、下個(gè)季度第一天

          SELECT???DATEADD(qq,DATEDIFF(qq,-1,getdate()),0)
          --2021-01-01 00:00:00.000


          5、上個(gè)月最后一天

          SELECT?DATEADD(dd,-DAY(getdate()),getdate())
          --2021-11-30 20:14:21.850


          6、今年最后一天

          SELECT?DATEADD(year,DATEDIFF(year,0,DATEADD(year,1,getdate())),-1)
          --2021-12-31 00:00:00.000


          7、去年同一天

          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)入高手如云的交流群


          推薦閱讀

          瀏覽 108
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月花婷婷 | 久操免费在线 | 亚洲日韩在线天堂 | 久久久无码成人 | 国产精品久久久久久久蜜月块 |