我在PostgreSQL中有一个数据库,我正在使用这个数据库在PHP中开发一个应用程序。 问题是,当我执行以下查询时,我在phpPgAdmin中得到了一个很好的结果,但是在我的PHP应用程序中我得到了一个错误。
查询:
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中使用ORIGINAL查询:
$ date =“2010”。“ - ”。$ selected_month。“ - ”。$ 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'
)
答案 0 :(得分: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