您可以将您的字符串转换为 XML,然后利用 XML 类型的方法,如VALUE(更多信息here)来提取您需要的信息:
DECLARE @mockup TABLE ([DISPLAYVALUE] VARCHAR(100));
INSERT INTO @mockup
VALUES ('466500-GO-INF-ITAPPS-EMP-CLERADM')
;WITH Splitted
AS (
SELECT
CAST('<x>' + REPLACE([DISPLAYVALUE], '-', '</x><x>') + '</x>' AS XML) AS Parts
FROM @mockup
)
SELECT
Parts.value(N'/x[1]', 'int') as [Main Account]
,Parts.value(N'/x[2]', 'varchar(50)') as [Business Unit]
,Parts.value(N'/x[3]', 'varchar(50)') as [Department]
,Parts.value(N'/x[4]', 'varchar(50)') as [Cost Center]
,Parts.value(N'/x[5]', 'varchar(50)') as [Asset Type]
,Parts.value(N'/x[6]', 'varchar(50)') as [Classification]
FROM Splitted;
结果:
第一个select语句:
SELECT
CAST('<x>' + REPLACE([DISPLAYVALUE], '-', '</x><x>') + '</x>' AS XML) AS Parts
FROM @mockup
将您的字符串转换为带有 XML 标记序列的 XML 文档(命名为 <x>,但您可以在这里使用其他任何东西),每个标记都包含您的值之一:
<x>466500</x>
<x>GO</x>
<x>INF</x>
<x>ITAPPS</x>
<x>EMP</x>
<x>CLERADM</x>
现在,在第二个 select 语句中,您可以使用特定的 XML 类型运算符(例如 VALUE())从 XML 中获取每个值并将其放在单独的列中:
SELECT
Parts.value(N'/x[1]', 'int') as [Main Account]
,Parts.value(N'/x[2]', 'varchar(50)') as [Business Unit]
,Parts.value(N'/x[3]', 'varchar(50)') as [Department]
,Parts.value(N'/x[4]', 'varchar(50)') as [Cost Center]
,Parts.value(N'/x[5]', 'varchar(50)') as [Asset Type]
,Parts.value(N'/x[6]', 'varchar(50)') as [Classification]
FROM Splitted;
这里您使用 XQuery 从第一次选择中创建的 XML 文档中提取单个值。
例如,要提取第一个标签 <x> 的内容,您可以使用 XQuery '/x[1]' 检索第一个元素,'/x[2]' 检索第二个元素,依此类推。