簡體   English   中英

在字符串SQL Server中的兩個字符之間選擇值

[英]Select value between two characters in string SQL server

我有一個很大的字符串值,我想放入數據庫中。 我有當前的代碼可以做到這一點。

DECLARE @Value NVARCHAR(max) = {status}
DECLARE @DYVALUE TABLE (VALUE NVARCHAR(MAX))
INSERT INTO @DYVALUE (value)
SELECT @VALUE
;WITH cte
AS (
SELECT Split.a.value('.', 'VARCHAR(1000)') AS Value
FROM (
    SELECT CAST('<S>' + REPLACE(Value, ',', '</S><S>') + '</S>' AS XML) AS Value
    FROM @DyValue
    ) AS A
CROSS APPLY Value.nodes('/S') AS Split(a)
)

 insert into mytable
 SELECT *
 FROM (
SELECT replace(LTRIM(SUBSTRING(Value, 0, CHARINDEX('|', value))),' ','') AS col1
    ,SUBSTRING(Value, CHARINDEX('|', Value) + 1, LEN(Value)) AS [col2]
    ,SUBSTRING(Value, CHARINDEX('/', Value) + 1, LEN(Value)) AS [col3]

FROM Cte
) dt

這使我可以將所有內容放在| 進入column1,然后將/后面的所有內容放入列3。我需要嘗試將所有內容放在值'|'之間 和'/'到column2

我在努力

   ,SUBSTRING(Value, CHARINDEX('|', Value) + 1, LEN(Value)) AS [col2]

只在兩個字符之間取那些值。

一個將在其上運行的字符串類型的示例是

1234567890 |再見殘酷世界/我應該在第3列2345678901 |再見殘酷世界/我應該在第3列3456789012 |再見殘酷世界/請把我放在3456789012第3列|再見殘酷世界/請把我放在第3列3,6324589657 | Hello World /我需要在第3列中1145698763 | Goodbye Cruel World /我應該在第3列36985214728 | Goodbye Cruel World /我應該在第3列7412589635 | Goodbye Cruel World /我應該在在7412589635的第3列中|再見殘酷的世界,/我應該在第6398756951的第3列中|請幫助我/請在第3列中添加我,

字符串將采用這種格式,我只是將值更改為更有趣的內容。

任何幫助將不勝感激。

使用Microsoft SQL Server 2012(SP3)

如果每個逗號之間總是三個單詞,並且每個單詞不超過128個字符,則使用PARSENAME

;WITH cte
     AS (SELECT Split.a.value('.', 'VARCHAR(1000)') AS Value
         FROM   (SELECT Cast('<S>' + Replace(Value, ',', '</S><S>') + '</S>' AS XML) AS Value
                 FROM   @DyValue) AS A
                CROSS APPLY Value.nodes('/S') AS Split(a))
SELECT Parsename(string, 3),
       Parsename(string, 2),
       Parsename(string, 1)
FROM   (SELECT Replace(Replace(value, '|', '.'), '/', '.') string
        FROM   cte)a 

另一種方式,可以使用任意數量的字符

WITH cte
     AS (SELECT Split.a.value('.', 'VARCHAR(1000)') AS Value
         FROM   (SELECT Cast('<S>' + Replace(Value, ',', '</S><S>') + '</S>' AS XML) AS Value
                 FROM   @DyValue) AS A
                CROSS APPLY Value.nodes('/S') AS Split(a))
SELECT LEFT(value, Charindex('|', value) - 1),
       Substring(value, Charindex('|', value) + 1, Charindex('/', value) - Charindex('|', value) - 1),
       Substring(value, Charindex('/', value) + 1, Len(value))
FROM   cte 

如果我正確理解了這個問題,則可能是一個解決方案:

SELECT 
SUBSTRING(Value, 0, CHARINDEX('|', Value)) AS column1,
SUBSTRING(Value, CHARINDEX('|', Value) + 1, CHARINDEX('/', Value) 
    - CHARINDEX('|', Value) - 1) AS column2,
SUBSTRING(Value, CHARINDEX('/', Value) + 1, LEN(Value)) AS column3

根據反饋進行編輯:

SELECT 
SUBSTRING(Value, 0, CHARINDEX('|', Value)) AS column1,
SUBSTRING(Value, CHARINDEX('|', Value) + 1, 
    CHARINDEX('/', Value) - CHARINDEX('|', Value) - 1) AS column2,
SUBSTRING(Value, CHARINDEX('/', Value) + 1, LEN(Value) - CHARINDEX('/', Value)) AS column3

暫無
暫無

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

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