mysql中求閏年的函式 SQL 判斷閏年

2021-10-19 18:56:39 字數 2218 閱讀 9365

sql 判斷閏年判斷當前年份是否閏年。

sql 判斷閏年 問題描述

判斷當前年份是否閏年。

sql 判斷閏年 解決方案

如果你已經有了一段時間的 sql 程式設計經驗,那麼你肯定知道本問題有多種解法。我也嘗試過多種解決方案,它們都能給出正確答案,但是本例項提供的方案可能是最為簡單的。下面的解決方案僅僅檢查 2 月的最後一天:如果有 2 月 29 日,則當前年份是閏年。

db2使用 with 子句遞迴查詢返回 2 月的每一天,然後呼叫聚合函式 max 確認 2 月的最後一天。

oracle

使用 last_day 函式找出 2 月的最後一天。

postgresql

使用 generate_series 函式返回 2 月的每一天,然後呼叫聚合函式 max 找出 2 月的最後一天。

mysql

使用 last_day 函式找出 2 月的最後一天。

sql server

使用 with 遞迴查詢返回 2 月的每一天,然後呼叫聚合函式 max 確認 2 月的最後一天。

sql 判斷閏年 擴充套件知識

db2遞迴檢視 x 裡的內嵌檢視 tmp1 按照下面的步驟返回 2 月的第一天。

(1) 從當前日期開始;

(2) 呼叫 dayofyear 函式確認當前日期是當前年份的第幾天;

(3) 從當前日期裡減去上述步驟算出的那個數字以得到上一年的 12 月 31 日,然後加上 1 天得到當前年份的 1 月 1 日;

(4) 再加上 1 個月得到 2 月 1 日。

上述步驟的運算結果如下所示。

然後,呼叫 month 函式找出內嵌檢視 tmp1 返回的日期對應的月份。

到此為止的結果只是作為生成 2 月的每一天的遞迴操作的起點。為了獲得 2 月的每一天,不斷為 dy 加上 1 天,直到月份不再是 2 月為止。該 with 計算的部分結果如下所示。

最後,針對 dy 列呼叫 max 函式返回 2 月的最後一天;如果是 29 日的話,則當前年份是閏年。

oracle

首先,呼叫 trunc 函式找出當前年份的第一天。

由於 1 月 1 日是一年中的第一天,下一步就是在此基礎上加上 1 個月得到 2 月 1 日。

然後,呼叫 last_day 找出 2 月的最後一天。

最後,呼叫 to_char 得到 28 或者 29(這一步不是必需的)。

postgresql

首先觀察內嵌檢視 tmp1 返回的結果。呼叫 date_trunc 函式得到當前年份的第一天,並將其轉換為 date 型別。

然後,在當前年份第一天的基礎上加上 1 個月,得到 2 月的第一天,並轉換為 date 型別。

接著,從內嵌檢視 tmp1 裡返回 dy,並依據 dy 計算出月份的值。呼叫 to_char 函式返回月份的值。

到此為止的計算結果構成了內嵌檢視 tmp2 的結果集。下一步要用到乙個非常有用的函式 generate_series 來生成 29 行資料(值從 1 逐一遞增到 29)。generate_series 函式返回的每一行(別名為 x)都和內嵌檢視 tmp2 的 dy 相加。部分結果如下所示。

最後,呼叫 max 函式找出 2 月的最後一天。針對該日期值呼叫 to_char 函式將得到 28 或者 29。

mysql

首先找出當前年份的第一天:先計算出當前日期是當前年份的第幾天,用當前日期減去該值,然後再加上 1 天。date_add 函式能完成這一步。

接著,再次呼叫 date_add 函式在上述計算結果的基礎上加上 1 個月。

現在得到了 2 月 1 日的日期值,接著呼叫 last_day 函式找出 2 月的最後一天。

最後,呼叫 day 函式返回 28 或者 29(這一步不是必需的)。

sql server

該解決方案利用 with 遞迴查詢生成 2 月的每一天。第一步先找出 2 月的第一天。為達到此目的,先找出當前年份的第一天:計算出當前日期是當前年份的第幾天,用當前日期減去該值,然後再加上 1 天。既然有了當前年份的第一天,呼叫 dateadd 函式加上 1 個月,就能得到 2 月的第一天了。

接著,返回 2 月的第一天,並計算出該日期對應月份的數值形式。

然後利用 with 子句的遞迴特性,不斷為內嵌檢視 tmp1 返回的 dy 加上 1,直到日期對應的月份不再是 2 月,部分結果如下所示。

現在得到了 2 月的每一天,最後呼叫 max 函式看一下最後一天是 28 日還是 29 日。還可以呼叫 day 函式返回數字 28 或者 29,而不是乙個日期值;不過,這一步不是必需的。

mysql中求閏年的函式 mysql生日提醒,閏年

如果您的演算法取決於該人的出生年份,則顯然存在問題.要解決此問題,首先在當前日期之後找到每個人的下乙個生日,然後計算該日期與現在之間的差異.select u birth,datediff next birthday,now as distance from select adddate birthd...

SQL注入中的MySQL特殊函式

4 查詢拼接函式使用 在滲透測試中,有時會遇到字串在前端被截斷的情況,爆出的資料也就不完整,此時mysql的一些函式就非常好用了 group concat 將組中的字串連線成為具有各種選項的單個字串。concat s1,s2.sn 將字串 s1,s2 等多個字串合併為乙個字串 concat ws x...

求1000 2023年間閏年的數量

首先我們說閏年的定義是 1 非整百年能被4整除的為閏年 如2004年就是閏年,1900年不是閏年 2 整百年能被400整除的是閏年 如2000年是閏年,1900年不是閏年 3 對於數值很大的年份,這年如果能被3200整除,並且能被172800整除則是閏年。如172800年是閏年,86400年不是閏年...