Я не могу исправить эту, казалось бы, простую, связанную с приведением, ошибку postgresql - PullRequest
0 голосов
/ 27 сентября 2011

Итак, у меня есть этот запрос:

SELECT count(*) AS count FROM table1 INNER JOIN "some query" 
WHERE "some more query" 
OR (table.smowid NOT LIKE (58)) OR "rest of query"

Извините за неясный код, полный запрос довольно большой, но проблема в части table.smowid NOT LIKE (58).

Это ошибка, которую я получаю:

ERROR:  operator does not exist: integer !~~ integer
LINE 11: or ( (table.smowid) NOT LIKE (58))
                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

К сожалению, я не знаю много о приведениях и типах, но почему БД жалуется, когда она переходит от целого к целому?Я попробовал CASTING, сказав (CAST (table.smowid) AS INTEGER) NOT LIKE (58), но это не сработало, я также попробовал (table.smowid :: integer) NOT LIKE (58), но это также не сработало по какой-то причине.

Итак, что мне делать?Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Вы должны привести их обоих к тексту или, что еще лучше, иметь столбец smowis со всеми значениями smowi в виде текста, чтобы сэкономить накладные расходы при приведении каждый раз.

2 голосов
/ 27 сентября 2011

NOT LIKE и его эквивалент !~~ определенно не являются целочисленными операторами. Что вы пытаетесь сделать с операторами сопоставления с образцом на целых числах?

Есть способ использовать его, но сначала вы должны привести (или формат ) целые числа к тексту.

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