我想在两个日期之间计算。
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版本,
答案 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
列。这没有意义,也无法奏效。修复您的架构,使用date
,timestamp without time zone
或timestamp 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;