Typecast string to integer - Postgres

Я импортирую данные из таблицы с исходными каналами в Varchar, мне нужно импортировать столбец в varchar в колонку строки. Я попытался использовать <column_name>::integer, а также to_number(<column_name>,'9999999'), но я получаю ошибки, так как есть несколько пустых полей, мне нужно восстановить их как пустые или нулевые в новую таблицу.

Пожалуйста, дайте мне знать, есть ли функция для того же самого.

Ответ 1

Дикая догадка: если ваше значение является пустой строкой, вы можете использовать NULLIF, чтобы заменить его на NULL:

SELECT
    NULLIF(your_value, '')::int

Ответ 2

Вы можете пойти еще дальше и ограничить это объединенное поле, например: -

SELECT CAST(coalesce(<column>, '0') AS integer) as new_field
from <table>
where CAST(coalesce(<column>, '0') AS integer) >= 10; 

Ответ 3

Если вам нужно обрабатывать пустые столбцы как NULL s, попробуйте следующее:

SELECT CAST(nullif(<column>, '') AS integer);

С другой стороны, если у вас есть значения NULL, которые вам нужно избегать, попробуйте:

SELECT CAST(coalesce(<column>, '0') AS integer);

Я согласен, сообщение об ошибке поможет много.

Ответ 4

Единственный способ, которым мне не удается получить ошибку из-за NULL, или специальных кареток или пустой строки, заключается в следующем:

SELECT REGEXP_REPLACE(COALESCE(<column>, '0'), '[^0-9]*' ,'0')::integer FROM table

Ответ 5

Я не могу комментировать (слишком мало репутации? Я довольно новый) на посту Лукаса.

В моей настройке PG to_number(NULL) не работает, поэтому мое решение будет:

SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END
FROM table