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);
现在我要获取年份是a年的所有行?
使用此查询。 leap年2月有29天。
select *
from Movie where DAY(EOMONTH(DATEADD(DAY,31,DATEADD(YEAR,@YEAR-1900,0)))) = 29
我正在使用sqlite3
WHERE strftime('%d', year || '-03-01', '-1 day') = '29'
令人讨厌的算术:
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
Modulo(%
)也适用于MySQL,但我认为显式MOD功能在眼睛上会更容易。