获得Sqlite中特定月份出生的所有玩家
我有一个包含以下属性的players表获得Sqlite中特定月份出生的所有玩家,sql,sqlite,Sql,Sqlite,我有一个包含以下属性的players表 _id INTEGER PRIMARY KEY, name text not null,birth_date date not null 我想要一个查询,可以给我一个特定月份出生的球员名单,比如1986年5月 如何做到这一点?我尝试使用SQLite中提供的日期和时间函数,但它们没有用 任何指点都将不胜感激 谢谢选择p.name、p.birth\u date 来自玩家p 其中p.出生日期>1986-04-30 出生日期1986-04-30 出生日期='19
_id INTEGER PRIMARY KEY, name text not null,birth_date date not null
我想要一个查询,可以给我一个特定月份出生的球员名单,比如1986年5月
如何做到这一点?我尝试使用SQLite中提供的日期和时间函数,但它们没有用
任何指点都将不胜感激
谢谢选择p.name、p.birth\u date
来自玩家p
其中p.出生日期>1986-04-30
出生日期<'1986-06-01';
(未测试)选择p.name、p.birth\u日期
来自玩家p
其中p.出生日期>1986-04-30
出生日期<'1986-06-01';
(未经测试)我认为这应该行得通。我没有试过:
SELECT _id, name, birth_date
FROM players
WHERE strftime('%m',birth_date) = '05' AND strftime('%Y',birth_date) = '1986'
我认为这应该行得通。我没有试过:
SELECT _id, name, birth_date
FROM players
WHERE strftime('%m',birth_date) = '05' AND strftime('%Y',birth_date) = '1986'
选择p.name
,p.出生日期
来自玩家p
其中p.出生日期>='1986-05-01'
出生日期<日期('1986-05-01','+1个月')
;
选择p.name
,p.出生日期
来自玩家p
其中p.出生日期>='1986-05-01'
出生日期<日期('1986-05-01','+1个月')
;
Matt Ball的版本可以使用索引;您的版本必须为每行计算strftime()两次。这是观察,不是批评。与我打交道的大多数人在处理这样的问题时都会考虑几个月或几年。然后他们把工作交给我来调整。是的,我更喜欢这种方法。我曾经有过这样一个“哦,为什么我没有想到那件事”的时刻。出于好奇,这行得通吗:。。。其中strftime(“%Y%m”,出生日期)=“1986 05”
?是的,我想应该是这样。我现在不能测试它,但我不明白为什么不能。使用原始实现可能更好。如果你只是寻找月份,而不关心年份,这可能会更好;您的版本必须为每行计算strftime()两次。这是观察,不是批评。与我打交道的大多数人在处理这样的问题时都会考虑几个月或几年。然后他们把工作交给我来调整。是的,我更喜欢这种方法。我曾经有过这样一个“哦,为什么我没有想到那件事”的时刻。出于好奇,这行得通吗:。。。其中strftime(“%Y%m”,出生日期)=“1986 05”
?是的,我想应该是这样。我现在不能测试它,但我不明白为什么不能。使用原始实现可能更好。只有在你只寻找月份而不关心年份的情况下,这可能会更好。第二个条件也可能是:和p.birth\u date<'1986-06-01'
。处理日期时也是一样,但如果你有日期时间就更好了。这是我的原始条件,但当@Catcall编辑我的答案以正确引用日期时,他们也更改了边缘条件。是的,我更改了Matt Ball的边缘条件。他最初写的是1986-04-30和1986-05-01。我现在明白了,他的意思可能是“1986-06-01”。以后我会尝试使用更轻的触感。:)@Catcall:你说得对——我只是没有键入我的意思。感谢修复:)第二个条件也可以是:和p.birth\u date<'1986-06-01'
。处理日期时也是一样,但如果你有日期时间就更好了。这是我的原始条件,但当@Catcall编辑我的答案以正确引用日期时,他们也更改了边缘条件。是的,我更改了Matt Ball的边缘条件。他最初写的是1986-04-30和1986-05-01。我现在明白了,他的意思可能是“1986-06-01”。以后我会尝试使用更轻的触感。:)@Catcall:你说得对——我只是没有键入我的意思。感谢修复:)
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')
;