2010-05-23 50 views
0

我在PostgreSQL中有一个数据库,我正在使用这个数据库在PHP中开发一个应用程序。 问题是,当我执行以下查询时,我在phpPgAdmin中得到了很好的结果,但在我的PHP应用程序中出现错误。错误使用to_char // to_timestamp

查询:

SELECT t.t_name, t.t_firstname 
    FROM teachers AS t 
    WHERE t.id_teacher IN ( 
     SELECT id_teacher FROM teacher_course AS tcourse 
      JOIN course_timetable AS coursetime 
      ON tcourse.course = coursetime.course 
      AND to_char(to_timestamp('2010-4-12', 'YYYY-MM-DD'),'FMD') = (coursetime.day +1) 
    ) 
    AND t.id_teacher NOT IN (
     SELECT id_teacher FROM teachers_fill WHERE date = '2010-4-12' 
    ) 
ORDER BY t.t_name ASC 

这是在PHP

operator does not exist: text = integer (to_timestamp('', 'YYYY-MM-DD'),'FMD') = 
(courset...^HINT: No operator matches the given name and argument type(s). 
You might need to add explicit type casts. 

解决这个错误是PHP中使用原来的查询目的的错误:

$ date =“2010”。“ - ”。$ selected_mon日 “ - ” $ SELECTED_DAY;。

SELECT ... 
    AND to_char(to_timestamp('$date', 'YYYY-MM-DD'),'FMD') = (coursetime.day +1) 
) 
AND t.id_teacher NOT IN (
     SELECT id_teacher FROM teachers_fill WHERE date = '$date' 
) 

回答

1

错误信息似乎很清楚我。你在混合字符串和数字。更确切地说,您将字符串('2010-4-12')转换为时间戳,然后转换为字符串,然后将其与int进行比较。这是一个乱七八糟的类型,并且postgresql对于键入非常严格(出于很好的理由)。你想在这里做什么?

to_char(to_timestamp('2010-4-12', 'YYYY-MM-DD'),'FMD') = (coursetime.day +1))

此外,你应该使用TIMESTAMP,只是一个日期。

如果(我不确定)您是否正在比较从格式为'YYYY-MM-DD'的日期到给定值(作为整数)的星期几,最好使用date_part。例如(未测试):

date_part('dow' , to_date('2010-4-12', 'YYYY-MM-DD')) = coursetime.day + 1

+0

谢谢:) 我做了一个好惹的类型:) – pepersview 2010-05-24 09:02:48