2011-04-01 72 views
0

我有一个球员表包含以下属性获取出生于特定月份的所有玩家SQLite中

_id INTEGER PRIMARY KEY, name text not null,birth_date date not null 

我想查询,可以给我出生于特定月份的所有球员名单说1986年5月。

这怎么可能实现?我尝试使用SQLite中提供的日期和时间函数,但它们没用。

任何指针,将不胜感激。

感谢

回答

4
SELECT p.name, p.birth_date 
    FROM Player p 
     WHERE p.birth_date > '1986-04-30' 
      AND p.birth_date < '1986-06-01'; 

(未经测试)

+0

第二个条件也可能是:1',p.birth_date <“1986-06-01''。处理日期时是一样的,但如果你有日期时间则更好。 – 2011-04-01 16:21:33

+0

这是我的原始状态,但当@Catcall编辑我的答案以正确引用日期时,他们也改变了边缘条件。 – 2011-04-01 16:24:06

+0

是的,我改变了马特球的边缘条件。他最初写了“p.birth_date”1986-04-30和p.birth_date <1986-05-01'。我现在看到他可能意思是'''''1986-06-01'。我会尝试在未来使用更轻的触感。 :) – 2011-04-01 16:39:13

2

认为这应该工作。我还没有尝试过:

SELECT _id, name, birth_date 
FROM players 
WHERE strftime('%m',birth_date) = '05' AND strftime('%Y',birth_date) = '1986' 
+2

马球的版本可以使用索引;您的版本将不得不为每行评估两次strftime()。这是一个观察,而不是批评。我处理的大多数人在处理这样的问题时都会考虑几个月和几年。然后他们把工作交给我调整。 – 2011-04-01 15:59:14

+0

是的,我更喜欢那种方法。我有一个“噢,我为什么没有想到这个”时刻。 – 2011-04-01 16:13:53

+0

出于好奇,这是否会工作:'... WHERE strftime('%Y%m',birth_date)='1986 05''? – 2011-04-01 19:16:31

0
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') 
; 
相关问题