如何在亚马逊红移中将字符串转换为整数

时间:2016-02-10 15:02:36

标签: amazon-redshift

我有一个包含id的列,目前是字符串。如果id确实是一个数字,我需要将其转换为实数整数,如果不是,则应将其转换为空值。我想在表上运行更新查询并创建一个新的整数id字段。

我无法确切地知道如何确定该字符串是否为数字

有人知道吗?

由于

尼尔

1 个答案:

答案 0 :(得分:1)

由于Redshift不支持修改列类型,因此最好使用所需的架构创建另一个表。方法是简单地将varchar列值插入整数并将其插入到新表中。

以下是一个例子:

dev=> CREATE TABLE table_varchar_id (id varchar(24), val varchar(24));
CREATE TABLE
dev=> INSERT INTO table_varchar_id values ('1111', 'aaaa'),('2222', 'bbbb'),('dummy1', 'cccc'),('dummy2', 'dddd');
INSERT 0 4
dev=> CREATE TABLE table_int_id (id int, val varchar(24));
CREATE TABLE
dev=>
dev=> INSERT INTO table_int_id (
dev(> SELECT
dev(>   CASE REGEXP_COUNT(id, '^[0-9]+$')
dev(>   WHEN 0 then NULL
dev(>   ELSE id::integer
dev(>   END as "id",
dev(>   val
dev(> FROM
dev(>   table_varchar_id
dev(> );
INSERT 0 4
dev=> SELECT * FROM table_varchar_id ORDER BY id;
   id   | val
--------+------
 1111   | aaaa
 2222   | bbbb
 dummy1 | cccc
 dummy2 | dddd
(4 rows)

dev=> SELECT * FROM table_int_id ORDER BY id;
  id  | val
------+------
 1111 | aaaa
 2222 | bbbb
      | dddd
      | cccc
(4 rows)