在postgresql中计算两个日期之间

时间:2013-04-02 05:21:55

标签: postgresql

我想在两个日期之间计算。

create table greatestdate(name varchar(20),city varchar(20),current_dates varchar(12),previous_date varchar(12));// create table



insert into greatestdate values('samuel','newyork','02-04-2013','01-01-2013'); //insert values

select * from greatestdate where (current_dates -previous_date)> 2 months as result;

然而我得到语法错误。请任何人建议我。

我试过这段代码,

select * from greatestdates where (now() -  previous_date) < interval '2 month';

收到错误消息,

错误:运算符不存在:整数&lt;间隔 第1行:... atestdates where(current_dates - previous_date)&lt;间隔...                                                              ^ 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我正在使用postgresql 9.2版本,

2 个答案:

答案 0 :(得分:2)

完整错误是:

regress=> select * from greatestdate where (current_dates -previous_date)> 2 months as result;
ERROR:  syntax error at or near "months"
LINE 1: ...atestdate where (current_dates -previous_date)> 2 months as ...
                                                             ^

问题是你写的:

2 months

你应该写的地方:

INTERVAL '2' MONTH

或:

CAST('2 months' AS interval)

请参阅用户手册中的间隔语法。

修复后,您会发现另一个问题 - 您正在尝试将as别名应用于WHERE子句。这是荒谬的。完全删除as result

这将揭示第三个问题:您尝试减去两个varchar列。这没有意义,也无法奏效。修复您的架构,使用datetimestamp without time zonetimestamp with time zone作为日期字段,而不是将其存储为varchar。修复表定义后,语句最终应该起作用。将日期存储为varchar绝不是一个好主意。

将来请在所有问题中显示您的PostgreSQL版本和错误消息的确切文本。

答案 1 :(得分:0)

@Craig进行大量错误跟踪后的最后一个错误

ERROR: operator does not exist: integer < interval LINE 1: 
...atestdates where (current_dates - previous_date) < interval... 
^ HINT: No operator matches the given name and argument type(s). 
You might need to add explicit type casts.
发生

因为日期类型算术返回整数,而不是间隔。为了避免这种情况:

select *
from greatestdates
where current_dates - interval '2 month' > previous_date;