с участием

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

 a_horse_with_no_name21 янв. 2011 г., 16:54
Вы должны исправить свой SQL-код, чтобы не полагаться на приведенные значения. Никогда не полагайтесь на причастные высказывания в ваших высказываниях.
 Simon21 янв. 2011 г., 16:59
Я согласен. Однако я не могу использовать стандартную часть программного обеспечения.

Ответы на вопрос(4)

что вы хотите вернуть поведение 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);
 Simon21 янв. 2011 г., 17:17
Простите, если я глуп, но ни одна из функций не возвращает целое число. Я ожидаю сделать CREATE CAST (varchar как целое число) ...
 a_horse_with_no_name21 янв. 2011 г., 17:10
Он содержит приведение к целому числу, которое совпадает с int4, если я не ошибаюсь.
 a_horse_with_no_name21 янв. 2011 г., 17:37
прощатьменя! I был глуп Я думал, что вы хотели вернуть поведение 8.3 (int к varchar).
 Simon21 янв. 2011 г., 17:02
Да уж. Я нашел это, но отсутствует int4 (varchar)

если вы обновите свой 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;
 johnmartirano23 мар. 2012 г., 21:23
Эта функция была полезна для меня, чтобы приводить поля varchar как обычный пользователь БД, который выдает запросы, а не сам тип.

код

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

l_code

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

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

SELECT 
...
WHERE
code = l_code AND
..

с участием

code = cast( l_code as character varying)   AND
Решение Вопроса

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

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

 Christian09 февр. 2012 г., 13:47
Более 3 тыс. Просмотров / sp / запросов для просмотра и исправления неявных приведений ... тогда вы пришли к этому легкому обходному пути. Это даст мне намного больше времени. Спасибо, спасатель работы! (Мне интересно, почему разработчики postgres не поместили параметр в postgresql.conf для этого ...)
 Peter Eisentraut10 февр. 2012 г., 10:17
Мы (разработчики PostgreSQL) живем и учимся.

Ваш ответ на вопрос