簡體   English   中英

如何從SQL查詢中用逗號分隔的字符串中選擇值?

[英]How to select values from string separated by comma in SQL Query?

我想在SQL查詢中從用逗號(,)分隔的字符串中選擇值,我嘗試使用以下查詢,但它僅提供3列,而我希望像8列

SELECT 
  LEFT(DB_field, CHARINDEX(',', DB_field)-1) as '1st column', 
  SUBSTRING(DB_field, CHARINDEX(',', DB_field)+1, LEN(DB_field)-CHARINDEX(',', DB_field)-CHARINDEX(',',REVERSE(DB_field)))  as '2nd column',
  RIGHT(DB_field, CHARINDEX(',', REVERSE(DB_field))-1)   as '3rd column'
FROM Table_Name

DB_field具有字符串值,但用逗號(,)分隔,例如123,456,789,abcd,efghjk,lmno,pqrs,tuvw如何在SQL查詢中從該字符串中選擇該值?

請任何人都可以幫助我

基於XML的解決方案:

;WITH cte AS (
    SELECT *
    FROM (VALUES
    (N'123,456,789,abcd,efghjk,lmno,pqrs,tuvw'),
    (N'987,654,321,dbca,kjhgfe,onml,srqp,xyz')
    ) as t(DB_field)
)

SELECT  t.c.value('/a[1]','nvarchar(max)') as [1column],
        t.c.value('/a[2]','nvarchar(max)') as [2column],
        t.c.value('/a[3]','nvarchar(max)') as [3column],
        t.c.value('/a[4]','nvarchar(max)') as [4column],
        t.c.value('/a[5]','nvarchar(max)') as [5column],
        t.c.value('/a[6]','nvarchar(max)') as [6column],
        t.c.value('/a[7]','nvarchar(max)') as [7column],
        t.c.value('/a[8]','nvarchar(max)') as [8column],
        t.c.value('/a[9]','nvarchar(max)') as [9column]
FROM (
    SELECT CAST(('<a>'+REPLACE(DB_field,',','</a><a>') +'</a>') as xml) as x
    FROM cte c
) as xt
CROSS APPLY xt.x.nodes('/') as t(c)

輸出:

1column 2column 3column 4column 5column 6column 7column 8column 9column
123     456     789     abcd    efghjk  lmno    pqrs    tuvw    NULL
987     654     321     dbca    kjhgfe  onml    srqp    xyz     NULL

如果您使用的是SQL Server 2014或更低版本,請創建一個自定義函數。

CREATE FUNCTION SplitString
(    
      @Input NVARCHAR(MAX),
      @Character CHAR(1)
)
RETURNS @Output TABLE (
      Item NVARCHAR(1000)
)
AS
BEGIN
      DECLARE @StartIndex INT, @EndIndex INT

      SET @StartIndex = 1
      IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
      BEGIN
            SET @Input = @Input + @Character
      END

      WHILE CHARINDEX(@Character, @Input) > 0
      BEGIN
            SET @EndIndex = CHARINDEX(@Character, @Input)

            INSERT INTO @Output(Item)
            SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)

            SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
      END

      RETURN
END
GO

並在您的選擇查詢中使用以上功能。

SELECT Item
FROM dbo.SplitString('Apple,Mango,Banana,Guava')

您可以參考此以獲取更多信息

如果您使用的是SQL Server 2016 ,則可以使用STRING_SPLIT

SELECT value  
FROM STRING_SPLIT('clothing,road,,touring,bike', ',')  
WHERE RTRIM(value) <> '';  

暫無
暫無

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

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