Заменить AZ и 0-9 в запросе sql postgresql - PullRequest
0 голосов
/ 18 сентября 2018

У меня в настоящее время есть строки, например, E-1082067D, и я хотел бы запросить упрощенную версию их для каждой строки.Возвращаем L (для буквы вместо AZ), S (для символа) и N (для номера 0-9).Я не могу обновить базу данных или создать новую таблицу, так как у меня нет привилегий и я просто хочу запросить данные.

До сих пор я разбил свою строку на отдельные символы и теперь хочу заменить символы разделения иобъедините их вместе, чтобы получить мой конечный результат, например, вместо E-1082067D будет LSDDDDDDDL.

Буду признателен за любые отзывы о том, как приведенные ниже действия могут быть исправлены, или если я поступлю неправильно.

с

elect site_name,natid, x, COUNT (x), substring(natid,1,1)as a,
substring(natid,2,1)as b,
substring(natid,3,1)as c,
substring(natid,4,1)as d,
substring(natid,5,1)as e,
substring(natid,6,1)as f,
substring(natid,7,1)as g,
substring(natid,8,1)as h,
substring(natid,9,1)as i,
substring(natid,10,1)as j,
substring(natid,11,1)as k,
substring(natid,12,1)as l,
substring(natid,13,1)as m 
from (
select site_name, subject_id, natid,natidchk, length(natid)as x
from demog 
order by x) as y
group by natid, site_name,  x
order by site_name, x;

1 Ответ

0 голосов
/ 18 сентября 2018

Этого можно достичь с помощью нескольких регулярных выражений:

with data (natid) as (
   values 
      ('E-1082067D'), 
      ('X&42FOO567$BAR')
)
select natid, 
       regexp_replace(regexp_replace(regexp_replace(natid, '([A-Z])', 'L', 'ig'), '[0-9]', 'N', 'ig'), '[-&$]', 'S', 'ig')
from data;       

Сначала все вхождения A-Z заменяются на L, затем все вхождения 0-9 заменяются на N и-, & или $ заменены на S

Приведенные выше значения возвращаются:

natid          | regexp_replace
---------------+---------------
E-1082067D     | LSNNNNNNNL    
X&42FOO567$BAR | LSNNLLLNNNSLLL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...