Postgresql.CREATE CAST «символ меняется от« целое » - PullRequest
12 голосов
/ 21 января 2011

Я хочу CREATE CAST подходящую функцию для преобразования «изменяющихся символов» в «целые». Кто-нибудь может предложить функцию? Все, что я пытаюсь, терпит неудачу.

Ответы [ 4 ]

20 голосов
/ 21 января 2011

Используйте это:

CREATE CAST (varchar AS integer) WITH INOUT [AS IMPLICIT];

Используются функции ввода / вывода соответствующих типов данных.

1 голос
/ 10 сентября 2011

Вышеприведенная функция работает, если вы обновите свой SQL, чтобы выполнить явное приведение. Однако, если вы добавите «как неявный» в конец вашего оператора «create cast», Postgres сможет автоматически выяснить, что вы пытаетесь сделать, сравнивая целое число с varchar, которое можно преобразовать в целое число.

Вот мое обновленное утверждение, которое, казалось, работает «неявно»:

CREATE FUNCTION toint(varchar) 
  RETURNS integer 
  STRICT IMMUTABLE LANGUAGE SQL AS 
'SELECT cast($1 as integer);';

CREATE CAST (varchar AS integer) WITH FUNCTION toint(varchar) as Implicit;
0 голосов
/ 15 мая 2012

Я получил ту же ошибку. У меня есть КОЛОННА

код

объявлено как переменный символ типа (20) и локальная переменная

l_code

объявлен как тип int.

Я решил заменить в процедуре

SELECT 
...
WHERE
code = l_code AND
..

с

code = cast( l_code as character varying)   AND
0 голосов
/ 21 января 2011

Полагаю, вы хотите вернуть поведение Postgres 8.3 в отношении неявного приведения.

См. Эту запись в блоге для примеров:
http://petereisentraut.blogspot.com/2008/03/readding-implicit-casts-in-postgresql.html

О: и ошибка этого поставщика программного обеспечения для исправления сломанного SQL;)

Редактировать

Это должно сделать это:

CREATE FUNCTION toint(varchar) 
  RETURNS integer 
  STRICT IMMUTABLE LANGUAGE SQL AS 
'SELECT cast($1 as integer);';

CREATE CAST (varchar AS integer) WITH FUNCTION toint(varchar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...