Удалить символы из определенного поля в таблицах

Мне нужно очистить базу данных, в которой один из столбцов (TOTAL_AREA) содержит некоторые символы в некоторых записях (не во всех)

Например, 5000㎡

Мне нужно очистить все поля, в которых есть эта запись, чтобы отображалось только 500

Как я могу сделать это с помощью SQL? Я просмотрел TRIM, но не смог найти способ выбрать все записи, в которых есть символ после числа, и их TRIM.

Любая помощь будет оценена

Спасибо


person tokyodev    schedule 20.08.2018    source источник
comment
проверьте это stackoverflow.com/questions /6066953/   -  person A Paul    schedule 20.08.2018
comment
Вы уверены, что хотите вернуть 500, а не 5000?   -  person Gordon Linoff    schedule 20.08.2018
comment
Кстати, ваши теги сбивают с толку - это MySQL или Snowflake?   -  person Marcin Zukowski    schedule 21.08.2018


Ответы (2)


Это довольно легко. MySQL выполняет неявное преобразование, игнорируя символы после цифр. Итак, вы можете сделать:

select (col * 1.0 / 10)

Для вашего примера это вернет 500.

person Gordon Linoff    schedule 20.08.2018
comment
в моем случае, когда я запускаю его, он возвращается с этим сообщением: Числовое значение «5000㎡以上» не распознано - person tokyodev; 20.08.2018
comment
@tokyodev . . . Действительно? Это отлично работает, когда я пробую это и на SQL Fiddle (sqlfiddle.com/#!9/ 9eecb/55554). - person Gordon Linoff; 20.08.2018

Предполагая, что вы хотите избавиться от всех символов, которые не являются цифрами, вы можете использовать, например. REGEXP_REPLACE, например.

create or replace table x(s string);

insert into x values
  ('111'),
  ('abc234xyz'),
  ('5000㎡'),
  ('9000㎡以上');

select s, regexp_replace(s, '[^\\d]*(\\d+)[^\\d]*', '\\1') from x;
-----------+--------------------------------------------------+
     S     | REGEXP_REPLACE(S, '[^\\D]*(\\D+)[^\\D]*', '\\1') |
-----------+--------------------------------------------------+
 111       | 111                                              |
 abc234xyz | 234                                              |
 5000㎡     | 5000                                             |
 9000㎡以上   | 9000                                             |
-----------+--------------------------------------------------+

Что мы делаем, так это сопоставляем последовательности из 0 или более нецифровых символов, за которыми следует 1 или более цифровых символов, и снова 0 или более нецифровых символов, и производим только среднюю последовательность.

Обратите внимание, что вы можете использовать другое регулярное выражение в зависимости от того, какие именно символы вы хотите сохранить/удалить.

person Marcin Zukowski    schedule 20.08.2018