我有一张PERSON表,他们有一个名字和一个生日。
例如,我有一个名为PERSON的表
INSERT INTO PERSON VALUES ( 'alice', '1986-10-10');
INSERT INTO PERSON VALUES ( 'kate', '1992-10-10');
我想输入一个将产生alice和kate的查询(显示所有分享月和日的条目的查询,年份无关紧要)。生日用于存储此日期,我使用了日期数据类型。
我有不同出生日期的其他价值观,所以我似乎无法弄清楚会产生爱丽丝和凯特的查询(因为他们分享他们生日的月份和日期)
这是我到目前为止所做的,但这并没有产生任何结果:
SELECT Name FROM PERSON
WHERE Birthday LIKE '_____XX__XX';
答案 0 :(得分:0)
您的查询将按原样运行(使用更正的模式),但您需要确保日期的格式正确。来自文档:
A time string can be in any of the following formats:
1. YYYY-MM-DD
...
因此您需要在所有日期使用该格式。 “1992-3-3”将不被视为日期;你需要使用“1992-03-03”。或者您可以使用朱利安日期,这使得算术非常方便,但在不使用日期/时间函数的情况下阅读更难一点。
如果您使用正确的ISO日期格式,那么LIKE子句将起作用,或者您可以使用日期/时间函数来提取日期。例如,
SELECT name, strftime('%m-%d',birthday) FROM person;
alice|10-10
kate|10-10
所以如果你想要你可以GROUP BY那个词:
SELECT strftime('%m-%d',birthday) as mday, count(*) FROM person GROUP BY mday;
或者找到所有不同的值,或者您喜欢的任何值。
例如,您可以通过将Person加入自身来获取所有人和所有与他们分享生日的人的列表:
SELECT p1.name, p2.name, strftime('%m-%d', p1.birthday)
FROM person p1 LEFT OUTER JOIN person p2
ON (strftime('%m-%d',p1.birthday) = strftime('%m-%d',p2.birthday) AND p1.rowid <> p2.rowid) ;
也就是说,使用提取的月 - 日将表连接到自身,并排除将行连接到自身。使用左外连接包括不与任何人分享生日的人。