Как получить все строки, представленные в таблице, используя запрос sql, где year - високосный год - PullRequest
1 голос
/ 14 января 2020
CREATE TABLE Movie (
MovieID int PRIMARY KEY,
year int,
rank int);

INSERT INTO Movie (MovieID, year, rank, ...)
VALUES (1, 1888, 4)
VALUES (2, 1889, 4)
VALUES (3, 1890, 5)
VALUES (4, 1900, 3)
VALUES (5, 1905, 4)
VALUES (6, 1947, 2)
VALUES (7, 1976, 1)
VALUES (8, 2000, 4);

Теперь я хочу получить все строки, где год високосный год?

Ответы [ 3 ]

3 голосов
/ 14 января 2020

я использую sqlite3

WHERE strftime('%d', year || '-03-01', '-1 day') = '29'
3 голосов
/ 14 января 2020

Используйте этот запрос. В високосном году в феврале 29 дней.

select * 
from Movie where DAY(EOMONTH(DATEADD(DAY,31,DATEADD(YEAR,@YEAR-1900,0)))) = 29
2 голосов
/ 14 января 2020

Скучная арифметика c:

MySQL:

SELECT *
WHERE MOD(`year`,4) = 0 AND MOD(`year`, 100) != 0 OR MOD(`year`, 400) = 0

SQLite (стандартный оператор по модулю):

SELECT *
WHERE year % 4 = 0 AND year %100 != 0 OR `year`% 400 = 0

по модулю (%) сработало бы и для MySQL, но я думал, что явная функция MOD будет проще для глаз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...