Ошибка при использовании to_char // to_timestamp - PullRequest
0 голосов
/ 23 мая 2010

У меня есть база данных в 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 с:

$ 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'
)

1 Ответ

1 голос
/ 23 мая 2010

Сообщение об ошибке кажется мне вполне понятным. Вы смешиваете строки и числа. Точнее, вы конвертируете строку ('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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...