提问者:小点点

MySQL中选择闰年的查询条件


我有一个年列在我的一个表,我需要找到那些年份是闰年在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

共3个答案

匿名用户

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'是指范围外的区域输出的不正确数据。