Postgresql 将字符串类型转换为整数

Postgresql 将字符串类型转换为整数,postgresql,Postgresql,我从Varchar中包含原始提要的表导入数据,我需要将Varchar中的一列导入字符串列。我尝试使用::integer和to_number“9999999”,但出现了错误,因为有几个空字段,我需要将它们作为空或null检索到新表中。胡乱猜测:如果您的值是空字符串,您可以使用null替换为null: SELECT NULLIF(your_value, '')::int 如果需要将空列视为null,请尝试以下操作: SELECT CAST(nullif(<column>, ''

我从Varchar中包含原始提要的表导入数据,我需要将Varchar中的一列导入字符串列。我尝试使用::integer和to_number“9999999”,但出现了错误,因为有几个空字段,我需要将它们作为空或null检索到新表中。

胡乱猜测:如果您的值是空字符串,您可以使用null替换为null:

SELECT
    NULLIF(your_value, '')::int

如果需要将空列视为null,请尝试以下操作:

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

我同意,错误信息会有很大帮助。

我不能评论太少的声誉?我对卢卡斯的职位很陌生

在我的PG上,设置为_numberNULL不起作用,因此我的解决方案是:

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

您甚至可以进一步限制此合并字段,例如:-

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

我成功避免因NULL、特殊字符或空字符串而出现错误的唯一方法是执行以下操作:

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

如果该值包含非数字字符,则可以将该值转换为整数,如下所示:

SELECT CASE WHEN <column>~E'^\\d+$' THEN CAST (<column> AS INTEGER) ELSE 0 END FROM table;
CASE操作符检查,如果它与整数模式匹配,则将速率转换为整数,否则返回0

您可以使用此查询

SUM(NULLIF(conversion_units, '')::numeric)
共同问题 天真地将任意字符串转换为整数,如下所示

选择::整数 通常会导致著名的错误:

Query failed: ERROR: invalid input syntax for integer: ""
问题 PostgreSQL没有用于将任何字符串安全类型转换为整数的预定义函数

解决方案 创建一个受PHP函数启发的用户定义函数

创建函数intvalcharacter Variating将整数返回为$$ 选择 案例 当lengthbtrimregexp_替换$1、[^0-9]、'g'>0时,则btrimregexp_替换$1、[^0-9]、'g'::整数 其他0 以intval结束; $$ 语言SQL 不变的 在NULL输入时返回NULL; 用法 /*例1*/ 选择intval'9000'; -产出:9000 /*例2*/ 选择intval'9gag'; -产出:9 /*例3*/ 选择intval“敏捷的棕色狐狸跳过懒惰的狗”; -输出:0
如果列有小数点

select NULLIF('105.0', '')::decimal

你能给我们看一下错误信息吗?如果错误类似于queryfailed:error:invalid input syntax for integer:请参阅使用函数this的解决方案,这应该可以工作,但它应该与不太详细的NULLIF方法完全等效。该标准实际上将NULLIF定义为CASE谓词的一种形式。对于我来说,9.6.2这是唯一有效的方法,所有其他答案都失败了。你不能添加一个WHERE!=无效的
select NULLIF('105.0', '')::decimal