简体   繁体   English

如何从SQL查询中用逗号分隔的字符串中选择值?

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

I want to select values from string separated by comma (,) in SQL Query, I tried with the following query but it gives only 3 columns and I want like 8 columns 我想在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 has string value but separate by comma (,) something like 123,456,789,abcd,efghjk,lmno,pqrs,tuvw How can I select that values from that string in SQL Query? DB_field具有字符串值,但用逗号(,)分隔,例如123,456,789,abcd,efghjk,lmno,pqrs,tuvw如何在SQL查询中从该字符串中选择该值?

Please anyone can help me 请任何人都可以帮助我

XML-based solution: 基于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)

Output: 输出:

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

Create a custom function if you are using SQL Server 2014 or less . 如果您使用的是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

And use the above function in your select query. 并在您的选择查询中使用以上功能。

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

You can refer this for more info 您可以参考此以获取更多信息

If you are using SQL Server 2016 , then you can use STRING_SPLIT 如果您使用的是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