我有一个带有出生日期的 sqlite 表。我想执行查询以选择年龄超过 30 岁的那些记录。我尝试了以下方法,但它不起作用:
select * from mytable where dob > '1/Jan/1980'
select * from mytable where dob > '1980-01-01'
原文由 Thunder 发布,翻译遵循 CC BY-SA 4.0 许可协议
QLite3 有一些很酷的新日期功能。根据 文档站点,您可以使用 date() 、 time() 、 datetime() 、 julianday() 、 unixepoch() 或 strftime() ,具体取决于列数据的格式。
如果您使用 strftime() ,就像我在下面的建议一样,那么您必须确保列数据的格式与 strftime 字符串的格式相同。
你可能想要这样的东西:
SELECT * FROM mytable WHERE dob < strftime("%m/%d/%Y", 'now', '-30 year');
请注意,您可能必须在此处更改格式字符串以匹配您自己的格式字符串。
这是我个人使用的一些代码,可以让您更好地了解它的强大程度。它可以让我获得前 3 个月的所有订单,不包括本月。
SELECT * FROM orders WHERE SHIPPEDDATE > strftime('%m/%d/%Y', 'now', 'start of month', '-3 month');
sqlite 的修饰符非常强大。 strftime() 中的第一个字符串是格式,第二个字符串是您希望日期开始的时间。 “月初”将日期设为 1,而“-3 月”则返回 3 个月。因此,如果我今天(08/03/2022)运行它,它使用的日期将是 05/01/2022。
原文由 Blake 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1.6k 阅读
可以使用这样的东西:
如果您使用的是 Sqlite V3.7.12 或更高版本
不要使用
date(dateofbirth)
只需使用dateofbirth
。因此,您的查询将如下所示: