簡體   English   中英

在每次出現分隔符時拆分字符串

[英]Split string at each occurrence of delimiter

我需要在每個分隔符出現時將此字符串拆分為多個字段,如下所示:

Display Value
466500-GO-INF-ITAPPS-EMP-CLERADM

Main Account  Business Unit   Department Cost Center   Asset Type   Classification
466500        GO              INF        ITAPPS        EMP          CLERADM

我目前正在使用下面的查詢來刪除“-”之前的字符:

stuff([DISPLAYVALUE], 1, charindex('-', [DISPLAYVALUE]), '')

然后我執行此查詢以返回“-”之前的字符:

case

when charindex('-',[DISPLAYVALUE])>0

then Substring([DISPLAYVALUE], 1, Charindex('-', [DISPLAYVALUE])-1)

else [DISPLAYVALUE]

end

不幸的是,這會導致多個幫助列。 有沒有辦法在一個查詢中實現這個解決方案?

您可以實現所需的 output 將您的字符串轉換為 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 從第一個 select 中創建的 XML 文檔中提取單個值。

例如,要提取第一個標簽<x>的內容,您可以使用 XQuery '/x[1]'檢索第一個元素,使用'/x[2]'檢索第二個元素,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM