Postgres警告:pg_query():查询失败:ERROR:运算符不存在:boolean = integer LINE 1

时间:2015-05-11 05:37:07

标签: sql postgresql

我正在使用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'

我的查询中有什么问题?

2 个答案:

答案 0 :(得分:2)

您的查询中有两个错误:

  1. 您正在将数字(0)与boolean
  2. 进行比较
  3. Postgres中没有date_diff()功能
  4. 假设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中的标准函数,但也许您使用此名称创建了一个函数。