簡體   English   中英

MySQL 中 select 閏年的查詢條件

[英]Query condition for select leap years in MySQL

我的一張表中有一個年份列,我需要在 MySQL 中找到閏年 表名是“電影”,我有一個特定的年份和標題列。 如何在 SQL 查詢中找到閏年的電影?

我寫了上面的查詢,但在我的回答中得到了“I 2009”的年份。

SELECT year, title from Movie where year%4=0 AND (year%100!=0 OR year%400=0)

數據的頭部是這樣的:

    title                       Year
0   The Avengers                2012
1   Captain America: Civil War  2016
2   Lion                        2016
3   Slumdog Millionaire         2008
4   2012                      I 2009
SELECT @year,
       DAY(CONCAT(@year, '-03-01') - INTERVAL 1 DAY) = 29 AS is_leap;

或者

SELECT @year,
       !MOD(@year, 4) - !MOD(@year, 100) + !MOD(@year, 400) AS is_leap;

因此

SELECT year, title 
FROM Movie 
WHERE DAY(CONCAT(year, '-03-01') - INTERVAL 1 DAY) = 29

或者

SELECT year, title 
FROM Movie 
WHERE !MOD(year, 4) - !MOD(year, 100) + !MOD(year, 400)

對於有電影的所有年份,這就足夠了:

where year % 4 = 0 

更准確的表達是:

where (year % 4 = 0 and year % 100 <> 0) or
      (year % 400 = 0)

IN不適用於這種情況。

年份列的數據類型是字符類型嗎? 通過使用 ceil 和 cast 函數,它檢查它是否為數字格式。

SELECT year, title from Movie where year%4=0 AND (year%100!=0 OR year%400=0) AND year=cast(ceil(year) as char);

4 2012 年我 2009 年

可能是應用問題。 如果符合閏年條件的“2012”的數據在年份列,而標題列的數據是NULL,那么標題列錯位,年份列output就好了。 如果以上,我認為'I'是不正確的數據 output 參考范圍之外的區域。

需要格式化年份列,然后檢查閏年條件。

WHERE (
(
   CAST(SUBSTR(TRIM(year),-4) AS INTEGER)%4=0 
   AND 
   CAST(SUBSTR(TRIM(year),-4) AS INTEGER)%100!=0
)

OR 
(
 CAST(SUBSTR(TRIM(year),-4) AS INTEGER)%100=0 
 AND 
 CAST(SUBSTR(TRIM(year),-4) AS INTEGER)%400=0)
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM