sqlite 选择日期条件

新手上路,请多包涵

我有一个带有出生日期的 sqlite 表。我想执行查询以选择年龄超过 30 岁的那些记录。我尝试了以下方法,但它不起作用:

 select * from mytable where dob > '1/Jan/1980'
select * from mytable where dob > '1980-01-01'

原文由 Thunder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 567
2 个回答

可以使用这样的东西:

 select dateofbirth from customer Where DateofBirth  BETWEEN date('1004-01-01') AND date('1980-12-31');
select dateofbirth from customer where date(dateofbirth)>date('1980-12-01');
select * from customer where date(dateofbirth) < date('now','-30 years');

如果您使用的是 Sqlite V3.7.12 或更高版本

不要使用 date(dateofbirth) 只需使用 dateofbirth 。因此,您的查询将如下所示:

 select * from customer where dateofbirth < date('now','-30 years');

原文由 Thunder 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进