根据JDBC中的Date拉取记录

时间:2015-03-26 14:49:12

标签: sql sqlite jdbc

如何退回自上次约会之日起11个月前最后一次约会日期的所有客户?还是12个月前从今天起一个月之后?

第一个声明正在我获得from_date的约会,并将其与当前日期进行比较,并返回明天发生的所有约会:

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(月,customer.last_appointment_date,DATEADD(月,getDate()))= 12它返回月份而不是有效列 - 它不会将其识别为有效的约会对象?

返回:引起:java.sql.SQLException:[SQLITE_ERROR] SQL错误或缺少数据库(没有这样的列:月)

1 个答案:

答案 0 :(得分:1)

计算比较字段的日期,而不是计算差异并与常量进行比较,数据库可以使用索引来查找记录。

使用date功能代替dateadd(请参阅SQLite equivalent of SQL Server DateAdd function):

SELECT  customer.id, 
        customer.last_appointment_date
FROM    customer 
WHERE   customer.last_appointment_date = date('now', '-11 month')