我有一个包含id的列,目前是字符串。如果id确实是一个数字,我需要将其转换为实数整数,如果不是,则应将其转换为空值。我想在表上运行更新查询并创建一个新的整数id字段。
我无法确切地知道如何确定该字符串是否为数字
有人知道吗?
由于
尼尔
答案 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)