Преобразование запроса PostgreSQL в запрос SQL Server - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно преобразовать мой запрос

select 
    unnest(string_to_array(names, ',')) as "Admin Name",
    unnest(string_to_array(phones, ',')) as "Admin Phone",
    unnest(string_to_array(emails, ',')) as "Admin Emails"
from 
    metadata_Table

в эквивалентный запрос SQL Server.

Есть предложения?

1 Ответ

1 голос
/ 10 ноября 2019

Вы не можете точно это легко сделать на SL Server. Не существует "string_split () с порядковым номером". И заказ с string_split().

не гарантируется. Пока Microsoft не расширит эти функции, я предлагаю рекурсивный подзапрос:

with cte as (
      select convert(varchar(max), null) as name, convert(varchar(max), null) as phone, convert(varchar(max), null) as email,
             convert(varchar(max), names + ',') as names_rest,
             convert(varchar(max), phones + ',') as phones_rest,
             convert(varchar(max), emails + ',') as emails_rest,
             0 as lev
      from metadata_Table
      union all
      select left(names_rest, charindex(',', names_rest) - 1),
             left(phones_rest, charindex(',', phones_rest) - 1),
             left(emails_rest, charindex(',', emails_rest) - 1),
             stuff(names_rest, 1, charindex(',', names_rest), ''),
             stuff(phones_rest, 1, charindex(',', phones_rest), ''),
             stuff(emails_rest, 1, charindex(',', emails_rest), ''),
             lev + 1
      from cte
      where emails_rest like '%,%'
     )
select *
from cte
where lev > 0;
...