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