Sql 在JDBC中基于日期提取记录
我如何退回从今天起11个月前最后一次预约的所有客户?还是从今天起一个月后的12个月前 第一个语句是“工作”,我从_日期获得约会,并将其与当前日期进行比较,然后返回明天发生的所有约会:Sql 在JDBC中基于日期提取记录,sql,sqlite,jdbc,Sql,Sqlite,Jdbc,我如何退回从今天起11个月前最后一次预约的所有客户?还是从今天起一个月后的12个月前 第一个语句是“工作”,我从_日期获得约会,并将其与当前日期进行比较,然后返回明天发生的所有约会: SELECT appointment.id, appointment.from_date WHERE (julianday('now') - julianday(appointment.from_date)) = 1 但是对于第二个声明,我不知道如何返回从当前日期算起最后一个约会日期是1
SELECT appointment.id,
appointment.from_date
WHERE (julianday('now') - julianday(appointment.from_date)) = 1
但是对于第二个声明,我不知道如何返回从当前日期算起最后一个约会日期是11个月前的所有客户
SELECT customer.id,
customer.last_appointment_date
FROM customer
WHERE datediff(month, customer.last_appointment_date, DATEADD(month, getDate())) = 12
datediff()
不起作用,因为我使用的是SQLite,它不是一个可识别的函数
任何帮助都将不胜感激
编辑:我在netbeans的代码中运行这些查询,我使用sqllitejdbc驱动程序通过准备好的语句运行它们
我编辑过,这是因为我正在运行netbeans,每次我使用datediff(month,customer.last_appointment_date,DATEADD(month,getDate())=12时,它返回的month不是一个有效的列-它不承认它是一个有效的日期部分
返回:由以下原因引起:java.sql.SQLException:[SQLITE\u ERROR]sql错误或缺少数据库(没有这样的列:month)计算要与字段进行比较的日期,而不是计算差值并与常量进行比较,这样数据库就可以使用索引来定位记录 使用
date
功能代替dateadd
(请参阅):
我在这两个语句中都看到语法错误。您确定这就是您正在使用的sql吗?您使用的数据库管理系统是什么?请尝试在第二个查询中删除customer.last_appointment_日期后的逗号。Datediff应该与jdbc一起工作“Datediff()不工作,因为我正在使用jdbc”没有意义。JDBC不会改变您的SQL。因此,如果该函数对您的DBMS有效,您可以通过JDBC使用它。我编辑了它,因为我正在通过netbeans运行,每次使用datediff(month,customer.last_appointment_date,DATEADD(month,getDate())=12时,它返回的month不是一个有效列-它无法将其识别为有效的日期部分?返回:原因:java.sql.SQLException:[SQLITE\u ERROR]sql错误或缺少数据库(没有这样的列:month),这不是
DATEADD
的正确语法。听你的问题,你应该只想要datediff(月,customer.last\u约会\u日期,getdate())
我尝试了这个方法,但是只有当我的上一次约会日期是DATETIME类型,但在2015-02-01表格中以字符串形式输入,并且无法返回sqldate格式的日期时,它才有效?@傻瓜:SQLite没有任何日期时间
数据类型。如果日期以SQLite无法理解的格式存储,则需要对其进行转换。看见
SELECT customer.id,
customer.last_appointment_date
FROM customer
WHERE customer.last_appointment_date = date('now', '-11 month')