我正在使用postgres,我想尝试date_diff,但我收到此错误
警告:pg_query():查询失败:ERROR:运算符不存在: boolean =整数LINE 1
然后这是我的查询
select id_mitra
,company_name
from ref_mitra
where reject=0 and DATE_DIFF(now(),date_status) > 3 and active='N'
我的查询中有什么问题?
答案 0 :(得分:2)
您的查询中有两个错误:
0
)与boolean
date_diff()
功能假设date_status
是(真实的)date
列,您的查询应如下所示:
select id_mitra
,company_name
from ref_mitra
where reject = false
and current_date - date_status > 3
and active='N';
now()
会返回timestamp
,但由于您显然需要天数(不是interval
),因此您应该使用current_date
代替now()
。< / p>
我不确定date_diff()
到底是什么,也许您需要编写date_status - current_date
才能获得相同的行为。
您也可以使用reject = false
where not reject
答案 1 :(得分:1)
将您的值0转换为布尔值:
struct mystruct {
int offset;
int * d;
};
int filecheck (struct mystruct *g, int * count) {
int v, size = 0;
FILE *f = fopen("/home/pi/schedule/default", "rb");
if (f == NULL) {
return 0;
}
fseek(f, 0, SEEK_END);
size = ftell(f);
fseek(f, 0, SEEK_SET);
int schedsize = sizeof(int);
int elementcount = size / schedsize;
free (g->d);
if ((g->d = malloc(size))==NULL) return 0;
if (elementcount != fread(g->d, schedsize, elementcount, f)) {
free(g->d);
return 0;
}
fclose(f);
*count = elementcount;
return 1;
}
void setp (struct mystruct *g) {
g->d = NULL;
}
int main (){
struct mystruct g;
setp(&g);
int i, count = 0;
if (filecheck(&g, &count)==0) {
printf("Returned 0\n");
return 0;
}
while (1) {
for (i=0;i<count;i++) {
printf("%d %d \n", *((g.d)+i), g.d[i]);
}
sleep(1);
}
return 0;
}
或者使用布尔值:
select id_mitra
,company_name
from ref_mitra
where reject = CAST(0 as boolean)
and DATE_DIFF(now(),date_status) > 3
and active='N';
DATE_DIFF()不是PostgreSQL中的标准函数,但也许您使用此名称创建了一个函数。