Как разделить числовой и текст в SQL, когда весь столбец хранится как текст?
У меня есть столбец, который включает в себя как числовые, так и текстовые данные. Потому что число представляет одну группу, а текст представляет другую группу. Тем не менее, столбец хранится в виде текста в SQL. Можно ли как-нибудь разделить их на две группы на основе этого столбца? Кстати, я использую хранилище данных снежинки.
2 ответа
Решение
Вы можете использовать регулярные выражения. Например, чтобы сначала поставить числовые значения:
select t.*
from t
order by (case when column1 rlike '^[0-9]+$' then 1 else 2 end)
Самый простой способ - использовать TRY_TO_NUMERIC(), которая возвращает числовое значение, если оно конвертируемо, и 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;