我有一个球员表包含以下属性获取出生于特定月份的所有玩家SQLite中
_id INTEGER PRIMARY KEY, name text not null,birth_date date not null
我想查询,可以给我出生于特定月份的所有球员名单说1986年5月。
这怎么可能实现?我尝试使用SQLite中提供的日期和时间函数,但它们没用。
任何指针,将不胜感激。
感谢
我有一个球员表包含以下属性获取出生于特定月份的所有玩家SQLite中
_id INTEGER PRIMARY KEY, name text not null,birth_date date not null
我想查询,可以给我出生于特定月份的所有球员名单说1986年5月。
这怎么可能实现?我尝试使用SQLite中提供的日期和时间函数,但它们没用。
任何指针,将不胜感激。
感谢
SELECT p.name, p.birth_date
FROM Player p
WHERE p.birth_date > '1986-04-30'
AND p.birth_date < '1986-06-01';
(未经测试)
我认为这应该工作。我还没有尝试过:
SELECT _id, name, birth_date
FROM players
WHERE strftime('%m',birth_date) = '05' AND strftime('%Y',birth_date) = '1986'
马球的版本可以使用索引;您的版本将不得不为每行评估两次strftime()。这是一个观察,而不是批评。我处理的大多数人在处理这样的问题时都会考虑几个月和几年。然后他们把工作交给我调整。 – 2011-04-01 15:59:14
是的,我更喜欢那种方法。我有一个“噢,我为什么没有想到这个”时刻。 – 2011-04-01 16:13:53
出于好奇,这是否会工作:'... WHERE strftime('%Y%m',birth_date)='1986 05''? – 2011-04-01 19:16:31
SELECT p.name
, p.birth_date
FROM Player p
WHERE p.birth_date >= '1986-05-01'
AND p.birth_date < date('1986-05-01','+1 month')
;
第二个条件也可能是:1',p.birth_date <“1986-06-01''。处理日期时是一样的,但如果你有日期时间则更好。 – 2011-04-01 16:21:33
这是我的原始状态,但当@Catcall编辑我的答案以正确引用日期时,他们也改变了边缘条件。 – 2011-04-01 16:24:06
是的,我改变了马特球的边缘条件。他最初写了“p.birth_date”1986-04-30和p.birth_date <1986-05-01'。我现在看到他可能意思是'''''1986-06-01'。我会尝试在未来使用更轻的触感。 :) – 2011-04-01 16:39:13