在PostgreSQL中,我有一个带有varchar列的表.数据应该是整数,我需要在查询中使用整数类型.有些值是空字符串.

SELECT myfield::integer FROM mytable

yields ERROR: invalid input syntax for integer: ""

在postgres中进行强制转换时,如果出现错误,如何查询强制转换并获得0?

推荐答案

我自己也在努力解决一个类似的问题,但我不希望函数的开销.我提出了以下问题:

SELECT myfield::integer FROM mytable WHERE myfield ~ E'^\\d+$';

Postgres简化了它的条件,所以你不应该让任何非整数碰到::integer强制转换.它还处理空值(它们与regexp不匹配).

如果您想要零而不是不 Select ,那么CASE语句应该可以:

SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;

Sql相关问答推荐

如何根据SQL中的列条件获取下一个时间戳?

SQL计数所有值在联接范围内的行

对于表A中的每一行,更新表B中与金额有关的行

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

连接特定行号

如何根据给定条件PostgreSQL迭代减少组中的行数

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

基于唯一值在Access查询中创建计数器

按分隔符和总和分析字符串

如何将我的联接数据放入每个用户每月多行的列中?

如何用客户名称计算sum(dr)和sum(cr)

如何在SQL中从多个查询进行分组

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

在 Postgres 中将结果按几十年划分

如何根据 SQL 中的阈值标记一个集群中的所有值?

获取多个开始-结束时间戳集之间经过的时间

删除重复记录但保留最新的SQL查询

使用ALTER TABLE无法删除列

如何根据与 BigQuery 中另一个表的匹配更新一个表中的列?

多列上的 SQL UNIQUE 约束 - 它们的组合必须是唯一的还是至少其中之一?