当整列存储为文本时,如何在 SQL 中分隔数字和文本?
How to separate numeric and text in SQL when the whole column is stored as text?
我有一个包含数字和文本数据的列。因为数字代表一组而文本代表另一组。但是,该列作为文本存储在 SQL 中。无论如何我可以根据这个专栏将它们分成两组吗?顺便说一句,我正在使用雪花数据仓库。
您可以使用正则表达式。例如,将数值放在前面:
select t.*
from t
order by (case when column1 rlike '^[0-9]+$' then 1 else 2 end)
最简单的方法是使用 TRY_TO_NUMERIC() ,其中 returns 如果它是可转换的数值,否则为 NULL。所以,例如:
create table xx(s string);
insert into xx values('hello_there'), ('1234'), ('look_out'), ('452');
select s, -- original column
try_to_numeric(s) snum, -- numeric version of the column
case when snum IS NULL then s else NULL end sstr -- non-numeric string
from xx;
我有一个包含数字和文本数据的列。因为数字代表一组而文本代表另一组。但是,该列作为文本存储在 SQL 中。无论如何我可以根据这个专栏将它们分成两组吗?顺便说一句,我正在使用雪花数据仓库。
您可以使用正则表达式。例如,将数值放在前面:
select t.*
from t
order by (case when column1 rlike '^[0-9]+$' then 1 else 2 end)
最简单的方法是使用 TRY_TO_NUMERIC() ,其中 returns 如果它是可转换的数值,否则为 NULL。所以,例如:
create table xx(s string);
insert into xx values('hello_there'), ('1234'), ('look_out'), ('452');
select s, -- original column
try_to_numeric(s) snum, -- numeric version of the column
case when snum IS NULL then s else NULL end sstr -- non-numeric string
from xx;