【问题标题】:How to Convert text values to integer values [duplicate]如何将文本值转换为整数值
【发布时间】:2015-11-30 11:33:41
【问题描述】:

我在将包含文本值的列转换为整数值时遇到问题。

在表地址中,我有列“邮政编码”类型 TEXT。我创建了一个新的列名“postcode_int”类型的整数。 在“邮政编码”列中,有些人写了例如“330 ...”或“00234”。 我如何检查该值是否为整数。如果一个值是整数,那么如何将此值从 TEXT 类型转换为 Integer 类型并将它们设置在“postcode_int”列中,以便稍后我可以在“11111”和'99999'。

我试图做这样的事情:

UPDATE adresse 
   SET postcode_int= case 
  when pg_typeof( REGEXP_REPLACE( COALESCE(trim( LEADING '0' FROM postcode), '0'), 
                                 '[^0-9]*' ,'0')::integer
                ) = integer 
  then postcode_int
  else 0 
   end;

关于

安德烈

【问题讨论】:

  • cast(charcol 作为整数)
  • 或者你也可以yourCharCol::integer
  • 如果我按照你的方式做,那么我得到这个错误:invalid input syntax for integer: "388.."
  • 所以你只想转换整数值,检查它们实际上是整数,因为可以有非整数值。您必须将此信息添加到您的问题中,因为它很重要!
  • @A.Greensmith 错误是因为有些行不能转换,因为它不是整数值。

标签: sql postgresql


【解决方案1】:

我相信你需要的 SQL 是:

UPDATE adresse 
SET postcode_int = CAST(postcode AS INT)

这是基于您的示例。

如果这个答案不清楚,请要求修改。

【讨论】:

  • 我明白了:错误:整数的无效输入语法:“388..” ********** Fehler ********** 错误:无效输入整数语法:“388..” SQL 状态:22P02
  • 那么这是这个问题的重复吗? stackoverflow.com/questions/2082686/…
  • 不完全是。如果它是整数,我需要将其添加到新列中。
  • "如果你想要零而不是不选择,那么 CASE 语句应该起作用:SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;"
  • 然后将 SELECT 更改为 UPDATE 并将 CASE 放在它上面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多