[英]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.