sql-server - 将 PostgreSQL 查询转换为 SQL Server 查询
问题描述
我需要转换我的查询
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 查询。
有什么建议么?
解决方案
您不能在 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;
推荐阅读
- docker - 将 ca 证书添加到使用指定用户运行的 Tomcat Docker 容器
- python - Python pandas 删除具有列值“NaN”的重复行
- php - 来自mysql的所有数据都没有按php条件显示
- amazon-web-services - admin-initiate-auth 在 Cognito 应用程序客户端上使用 AWS CLI 并带有密钥
- javascript - 在 Angular 中更新 chart.js
- debugging - 使用 Visual Studio Code 调试 GWT
- c++ - 打印不同类型的最有效方法(来自同一个数组?)
- c++ - C++每秒运行异步函数
- java - EasyMock / Arrays.asList(...) 只有一个 varagrs 参数
- sql-server - 是否可以执行多次使用“GO”的语句?