Есть несколько синтаксических ошибок. В частности, использование regexp_like
некорректно.
select
distinct field_name
, CASE
WHEN field_name is not null AND regexp_like(field_name, '[a-zA-Z]{1}\d{4}')
THEN '<whatever>'
ELSE null
END as field_name1
from "table"
;
Кстати, регулярное выражение не соответствует описанию, поскольку оно соответствует в точности 4 цифры (вместо до 4 ). Последнее будет обработано [a-zA-Z]\d{1,4}
.
Обновление
Чтобы отобразить field_name
значений в набор имен, подчиняющихся шаблону R\d{4}
с последовательной нумерацией, начинающейся с 1, используйте один из следующих запросов:
Вариант 1: field_name
является AK для table
select field_name
, 'R' || to_char(rownum, 'FM0009') anon_field_name
from "table"
;
Вариант 2: table
может содержат дубликаты field_name
select field_name
, 'R' || to_char(rownum, 'FM0009') anon_field_name
from (
select
distinct field_name
from "table"
) t_names
;
Запросы задаются от c до oracle, но практически каждый rdbms имеет функцию / псевдостолбец, эквивалентный ROWNUM
, и предлагает функции форматирования строки для начальных нулей пэдов .
Рандомизированное отображение
Отображение между field_names
и числами в именах анонимных полей отражает порядок, в котором записи из table
встречаются в наборе результатов. Этот порядок не гарантируется, если вы не укажете предложение order by
. Технически, вывод не предсказуем.
Однако, если у вас сложилось впечатление, что порядок записи не изменяется (в достаточной степени) по запросам, добавьте (псевдо) случайные числа в набор результатов и упорядочите его соответствующим образом:
select field_name
, 'R' || to_char(rownum, 'FM0009') anon_field_name
from (
select field_name
, dbms_random.value code
from (
select
distinct field_name
from "table"
) t_names
) t_withrandom
order by t_withrandom.code
;
Опять же, метод генерации (псевдо) случайных чисел указывается от c до Oracle, но продукты всех других поставщиков имеют эквивалентные функции.