Как я могу изменить поле от bigint до символа, меняющегося в postgresql? - PullRequest
4 голосов
/ 10 мая 2011

Я получаю сообщение об ошибке "несовместимые типы: bigint и символы меняются."но я знаю, что обычно есть способ обойти это.

Ответы [ 3 ]

9 голосов
/ 10 мая 2011

Кажется, работает нормально в PG 9.0, но если не в вашей версии, вы всегда можете сначала преобразовать в текст:

select 1::bigint::text::varchar;
4 голосов
/ 10 мая 2011
alter table abc alter column def type varchar using def::varchar;
0 голосов
/ 02 июля 2015

Прежде всего, спасибо "Дени де Бернарди" (прокомментировано выше) ,

Я пытался обновить поле, и это было очень полезно.

Недавно я изучал PostgreSQL VS Redshift SQL и как разные запросы ...

Итак, пытаясь сделать обновление в RedShift, оно работало так:

UPDATE table_name SET fieldname = fieldname + 100 
FROM table_name WHERE substring(fieldname from 4 for 2) 
IN ('01','02','03','04','05','06','07','08','09','10','11','12');

Но в Postgres 9.3 мой запрос не удался.

Так что после долгих исследований и попыток найти что-нибудь, чтобы это заработало ...

В конце концов, все, что я добавил для добавления, было ::varchar в конце имени поля, например:

fieldname::varchar

Причина была в том, что подстрока postgresql () ожидает текст, а мое имя поля было BIGINT, что не позволило мне использовать подфункцию.

Итак, для сравнения запросов:

СТАРЫЙ запрос

UPDATE table_name SET fieldname = fieldname + 100 
FROM table_name WHERE substring(fieldname from 4 for 2) 
IN ('01','02','03','04','05','06','07','08','09','10','11','12');

Новый запрос для Postgres 9,3

UPDATE table_name SET fieldname = fieldname + 100 
FROM table_name WHERE substring(fieldname::varchar from 4 for 2) 
IN ('01','02','03','04','05','06','07','08','09','10','11','12');

Обратите внимание: снова все, что мне нужно было сделать, это преобразовать поле для использования в запросе подстроки, чтобы оно содержало :: varchar

Снова

Спасибо.

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