我想从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 Query中从该字符串中选择该值?
请有人帮助我
答案 0 :(得分:1)
基于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
答案 1 :(得分:0)
如果您使用 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')
You can refer this for more info
如果您使用 SQL Server 2016 ,则可以使用STRING_SPLIT
SELECT value
FROM STRING_SPLIT('clothing,road,,touring,bike', ',')
WHERE RTRIM(value) <> '';