Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中选择闰年的查询条件_Mysql_Sql_Leap Year - Fatal编程技术网

MySQL中选择闰年的查询条件

MySQL中选择闰年的查询条件,mysql,sql,leap-year,Mysql,Sql,Leap Year,我的表中有一个年份列,我需要在MySQL中找到闰年的年份。表名为“Movie”,其中有一个特定的年份和标题列。如何在SQL查询中查找闰年电影 我写了上面的问题,但在我的回答中得到了“2009年” SELECT year, title from Movie where year%4=0 AND (year%100!=0 OR year%400=0) 数据的标题如下所示: title Year 0 The Avengers

我的表中有一个年份列,我需要在MySQL中找到闰年的年份。表名为“Movie”,其中有一个特定的年份和标题列。如何在SQL查询中查找闰年电影

我写了上面的问题,但在我的回答中得到了“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

在有电影的所有年份,这就足够了:

where year % 4 = 0 
更精确的表达式是:

where (year % 4 = 0 and year % 100 <> 0) or
      (year % 400 = 0)
其中(年份%4=0和年份%100 0)或
(年份%400=0)
中的
不适用于这种情况

SELECT @year,
       DAY(CONCAT(@year, '-03-01') - INTERVAL 1 DAY) = 29 AS is_leap;


相应地

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


年份列的数据类型是否为字符类型? 通过使用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”数据在年份列中,且标题列的数据为空,则标题列未对齐,年份列输出与之类似。
如果出现上述情况,我认为“I”指的是范围外的区域,是不正确的数据输出。

如何删除这些值。表(1)中有一些错误的数据输入,为什么将年份存储为字符串?(2) 为什么年份具有非年份值?你应该修复数据,而不是查询。有趣。。
day(最后一天(concat(@year,'-02-01'))
怎么样?@PaulSpiegel闰年和非闰年的唯一区别是有无
2月29日
。因此,您可以从
3月1日减去1天,或在
2月28日减去1天,并检查结果日期的日期。更改后,结果中仍然会出现“2011年I月”和“2009年I月I日”以及这些闰年。如何丢弃它们?@ShauryaSheth我无法重现您的问题,需要样本数据-请参阅对问题的评论。我不明白主要的
'I'
符号是从哪里取来的……标题年0复仇者2012 1美国队长:内战2016 2狮子2016 3贫民窟百万富翁2008 4 20122009年我改变了它,仍然得到了“2011年”和“2009年”以及那些闰年的成绩。如何丢弃它们?添加示例创建表/插入脚本(或创建一个小提琴),以允许查看所描述的问题。@Akina AFAIK
year
未保留。
'I 2009'
定位为
0
。数据头如下所示:这是表格格式的文本,而不是SQL脚本。它甚至不允许定义值的位置和格式化空间的位置。
SELECT year, title 
FROM Movie 
WHERE !MOD(year, 4) - !MOD(year, 100) + !MOD(year, 400)
SELECT year, title from Movie where year%4=0 AND (year%100!=0 OR year%400=0) AND year=cast(ceil(year) as char);