我有一个年列在我的一个表,我需要找到那些年份是闰年在MySQL。 表名是‘电影’,我有一个特定的年份和标题列在它。 如何在SQL查询中查找闰年的电影?
我写了上面的问题,但在我的答案中得到了年份'I2009'。
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 201 2 I 2009
可能是应用程序的问题。 如果匹配闰年条件的“2012”的数据在年份列中,而标题列的数据为空,因此标题列不对齐,年份列输出喜欢它。 如果以上,我认为'I'是指范围外的区域输出的不正确数据。