SQL日期的計算合集
前言
在SQL Server中,時間和日期是常見的數(shù)據(jù)類型,也是數(shù)據(jù)處理中重要的一部分。SQL Server提供了許多內(nèi)置函數(shù),用于處理時間和日期數(shù)據(jù)類型。這些函數(shù)可以幫助我們執(zhí)行各種常見的任務,例如從日期中提取特定的部分,計算日期之間的差異,以及將日期和時間轉(zhuǎn)換為不同的格式。本文將介紹SQL Server中一些常用的時間和日期函數(shù),以及它們的用法和示例。
一些常用的函數(shù)
GetDate獲取當天日期
select getdate()
DateFromParts自定義一個日期
select datefromparts(2023,2,28)
DateFormat轉(zhuǎn)換日期格式
SELECT DATEFORMAT(YourDateColumn, 'YYYY-MM-DD') AS FormattedDate FROM YourTable
DateAdd函數(shù)計算日期偏移后的新日期
SQL中的DATEADD函數(shù)用于在給定的日期上添加指定的時間間隔。它的語法如下:
DATEADD(datepart, number, date)
其中,datepart參數(shù)指定要添加的時間間隔類型,例如year(年)、quarter(季度)、month(月)、day(天)、hour(小時)、minute(分鐘)或second(秒)。number參數(shù)指定要添加的時間間隔數(shù)量。date參數(shù)是要進行添加操作的日期。
下面是一些DateDADD函數(shù)使用的示例:
--1. 在當前日期上添加一天: SELECT DATEADD(day, 1, GETDATE()) --2. 在當前日期上添加一個月: SELECT DATEADD(month, 1, GETDATE()) --3. 在當前日期上添加一小時: SELECT DATEADD(hour, 1, GETDATE()) --4. 在指定的日期上添加一周: SELECT DATEADD(week, 1, '2021-01-01')
這些示例中,DATEADD函數(shù)會返回一個新的日期,該日期是在給定的日期上添加了指定的時間間隔后得到的。
DateDiff函數(shù)算時間差
在SQL中,DATEDIFF函數(shù)用于計算兩個日期之間的時間間隔。它返回兩個日期之間的差值,以指定的時間間隔單位為單位。
DATEDIFF函數(shù)的語法如下:
DATEDIFF(datepart, startdate, enddate)
其中,datepart參數(shù)指定要計算的時間間隔類型,例如year(年)、quarter(季度)、month(月)、day(天)、hour(小時)、minute(分鐘)或second(秒)。startdate和enddate參數(shù)是要計算時間間隔的兩個日期。
下面是一些示例:
- 計算兩個日期之間的天數(shù)差:
SELECT DATEDIFF(day, '2021-01-01', '2021-02-01')
- 計算兩個日期之間的小時差:
SELECT DATEDIFF(hour, '2021-01-01 10:00:00', '2021-01-01 12:00:00')
- 計算兩個日期之間的月數(shù)差:
SELECT DATEDIFF(month, '2021-01-01', '2022-01-01')
這些示例中,DATEDIFF函數(shù)會返回兩個日期之間的差值,以指定的時間間隔單位為單位。
取日期的周、年、月、日等信息
DATEPART函數(shù)。DATEPART函數(shù)返回一個整數(shù),它是日期的一部分,例如日,月和年。
以下是DATEPART函數(shù)的語法:
select DATEPART ( date_part , input_date )
DATEPART函數(shù)有兩個參數(shù):
date_part是要提取的日期的一部分(參見下表中的有效日期部分)。
input_date是提取日期部分的日期。
因此,獲取一個日期的WeekNum和WeekDay可以這樣
select DATEPART ( wk , getdate() ) as wk select DATEPART ( weekday , getdate() ) as wkd
date_part可取值:
在最前面加上以下語句將每周第一天設置為周一:
SET DATEFIRST 1 -- select DATEPART ( wk , getdate() ) as wk -- select DATEPART ( weekday , getdate() ) as wkd
獲取日期所屬的當年的ISO標準周周序(ISO 標準周是一種將一年分為 52 或 53 周的時間計算方法,它是國際標準化組織(ISO)制定的一種時間標準。ISO 標準周的起始日期為每年的第一個周四,即該周的第一天為周四,最后一天為周三)
select DATEPART ( isowk , getdate() ) as iso_wk
計算本月第一天,上月第一天,去年本月第一天日期
sql中沒有現(xiàn)成的函數(shù)實現(xiàn),我們可以分別計算當前日期的天數(shù)d,然后往前移動d天,就可以算出來當前月的第一天的日期了。還一種思路,日期實際上就是數(shù)值,我們以0作為基礎日期,0表示的日期1970年1月1日1時1分1秒,我們計算當前日期距離基礎日期0過去了多少個月,然后在基礎日期上移動相應的月份即可。
有了當前日期月份的第一天,移動一個月就得到了上個月的第一天日期,移動一年就得到了去年當月第一天的日期。
-- 本月第一天,0作為基礎日期1970-01-01 00:00:00 SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS '本月第一天'; -- 上個月第一天 SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) AS '上個月第一天'; -- 上個月最后一天 SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) AS '上個月最后一天';
計算本周第一天,上周第一天以及上周同期
涉及到周的計算要復雜點,如何計算當前周的第一天,如何計算當前周的前一周的第一天。
對于第一個問題,我們思考先計算當前日期是周幾,比方說周三,那說明周一需要往前推2天,我們先用dateparts計算WeekDay,然后用dateadd往前推就好了。
有了本周第一天,再推一個week就出來上周第一天的日期,接著加上這周的周幾就能推出上周同期的日期。
DECLARE @Today DATE = GETDATE(); --設置周一為一周的第一天 SET DATEFIRST 1 -- 計算本周第一天 DECLARE @FirstDayOfWeek DATE = DATEADD(DAY, 1 - DATEPART(WEEKDAY, @Today), @Today); -- 計算上周第一天 DECLARE @FirstDayOfLastWeek DATE = DATEADD(WEEK, -1, @FirstDayOfWeek); -- 輸出結(jié)果 SELECT @FirstDayOfWeek AS '本周第一天', @FirstDayOfLastWeek AS '上周第一天';
到此這篇關于SQL日期的計算合集的文章就介紹到這了,更多相關SQL日期計算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SqlServer中根據(jù)某幾列獲取重復的數(shù)據(jù)將其刪除并保留最新一條
有時候,我們某個數(shù)據(jù)表中,可能有幾列的數(shù)據(jù)都是一樣的,此時我們可能想查詢出這幾列數(shù)據(jù)相同的所有數(shù)據(jù)行,并保留最新一條,將其他重復的數(shù)據(jù)刪除,這篇文章主要介紹了SqlServer中根據(jù)某幾列獲取重復的數(shù)據(jù)將其刪除并保留最新一條,感興趣的朋友一起看看吧2024-04-04親自教你使用?ChatGPT?編寫?SQL?JOIN?查詢示例
這篇文章主要介紹了使用ChatGPT編寫SQL?JOIN查詢,作為一種語言模型,ChatGPT 可以就如何構(gòu)建復雜的 SQL 查詢和 JOIN 提供指導和建議,但它不能直接訪問 SQL 數(shù)據(jù)庫,它可以幫助您了解語法、最佳實踐和有關如何構(gòu)建查詢以高效執(zhí)行的一般指導,需要的朋友可以參考下2023-02-02