Вопрос по postgresql – введите строку в целое число - Postgres

97

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

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

Не могли бы вы показать нам сообщение об ошибке? Это помогло бы Frank Heikens

Ваш Ответ

6   ответов
20

специальных символов или пустой строки - это сделать так:

SELECT REGEXP_REPLACE(COALESCE(<column>, '0'), '[^0-9]*' ,'0')::integer FROM table
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededWHERE <column> != NULL?
49

например: -

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

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

SELECT
    NULLIF(your_value, '')::int
4

вы можете преобразовать значение в целое число следующим образом:

SELECT CASE WHEN <column>~E'^\\d+$' THEN CAST (<column> AS INTEGER) ELSE 0 END FROM table;

Оператор CASE проверяет & lt; столбец & gt ;, если он соответствует целочисленному шаблону, он преобразует скорость в целое число, в противном случае он возвращает 0

23

NULLs, попробуйте это:

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

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

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

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

11

в отношении Лукаса ' сообщение.

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

SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END
FROM table
Error: User Rate Limit ExceededNULLIF()Error: User Rate Limit Exceeded

Похожие вопросы