首页 > 解决方案 > 将 2 个表值函数合并为一个具有不同列的表

问题描述

首先,我有一个stringSplit()表值函数。

假设我有这些作为参数:

var_1 = 'Apple.jpg,Carrot.png,Fruits.pdf'
var_2 = '9V0I1fab\CvaA5h,IV0asdkas//bVasA,Uasdl00/9asA' //Example base64 formats

使用stringSplit(var_1, ',') and后我该怎么做stringSplit(var_2, ',')?它应该合并为一个具有不同列的表,比如说:

| name       |       b64        |
---------------------------------
| Apple.jpg  | 9V0I1fab\CvaA5h  |
| Carrot.png | IV0asdkas//bVasA |
| Fruits.pdf | Uasdl00/9asA     |

标签: sqlsql-serversql-server-2012

解决方案


不幸的是,string_split()不保证返回值的顺序。它也没有返回索引号的选项。

如果每个字符串中的元素都是唯一的,您可以这样做:

select s1.value as name, s2.value as b64
from (select s.value,
             row_number() over (order by charindex(',' + s.value + ',', ',' + @var_1 + ',')) as seqnum
      from string_split(@var_1, ',') s
     ) s1 join
     (select s.value,
             row_number() over (order by charindex(',' + s.value + ',', ',' + @var_2 + ',')) as seqnum
      from string_split(@var_2, ',') s
     ) s2
     on s1.seqnum = s2.seqnum;

是一个 db<>fiddle。


推荐阅读