我有一个包含出生日期的sqlite表格。我想执行一条查询来选择那些年龄大于30岁的记录。 我尝试了以下方法,但没有成功:
select * from mytable where dob > '1/Jan/1980'
select * from mytable where dob > '1980-01-01'
可以使用类似以下的东西:
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');
尝试使用日期格式“YYYY-MM-DD”进行编写
select * from mytable where dob > '1980-01-01'
select * from mytable where datediff(dob, now()) > 30
您需要查找SQLite的特定语法。
select * from mytable where dob > '1980-01-01'
可能无法工作,但在目前的sqlite3
中,这个命令可以完美执行。 - Shane错误(1):没有这个函数:now
和错误(1):没有这个函数:datediff
*。 - jwwQLite3有一些很酷的新日期函数。根据文档网站,您可以使用date()、time()、datetime()、julianday()、unixepoch()或strftime(),具体取决于您的列数据格式。
如果您使用strftime(),就像我下面的建议一样,那么您必须确保您的列数据与您的strftime字符串格式相同。
您可能想要这样做:
SELECT * FROM mytable WHERE dob < strftime("%m/%d/%Y", 'now', '-30 year');
请注意,您可能需要更改此处的格式字符串以匹配您自己的格式。
以下是我个人使用的一些代码,让您更好地了解它的强大功能。它让我可以获取前三个月的所有订单,不包括本月。
SELECT * FROM orders WHERE SHIPPEDDATE > strftime('%m/%d/%Y', 'now', 'start of month', '-3 month');
在sqlite中,修饰符非常强大。 strftime() 内的第一个字符串是格式,第二个字符串是您想要日期开始的时间。'Start of month' 将日期设置为1号,'-3 month' 回溯3个月。因此,如果我今天运行它(08/03/2022),它使用的日期将是05/01/2022。
从mytable中选择*,其中dob的日期>date('1980-01-10')
date(dateofbirth)
,只需要使用dateofbirth
就可以了。 - wecingdate(field) > date('2018-05-20')
和field > '2018-05-20'
对我来说返回的结果不同,因此如果字段不是日期而是日期时间,则使用函数date()
是正确工作的唯一方式。 - mojmir.novak