[英]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.