Я импортирую данные из таблицы с исходными каналами в 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