-1

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

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';

收到错误消息,

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

我正在使用 postgresql 9.2 版本,

4

2 回答 2

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 版本和错误消息的确切文本。

于 2013-04-02T05:26:19.003 回答
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;
于 2013-04-02T11:41:57.057 回答