我之前问了一个关于解析字符串的问题,其中字符串是逗号和半冒号分隔。我了解流程并做了一些很好的编辑,以满足我的需求。现在我的问题是返回的结果是在一列中,而不是每列的解析数据的一部分。
351856040520298
241111
1G
141007024755
A
1437.2453N
12100.2887E
3.10
206
0.8
21010000
2G
141007024755
10
43.6
14.08
00.18
273295019.6
以上是结果。所有这些都在1列中命名为方法2
现在我要展示的是1个数据1列
351856040520298 |241111 |1G | 141007024755 |A |1437.2453N |12100.2887E |3.10 |206 |0.8 |21010000 |2G |141007024755 |10 |43.6 |14.08 |00.18 |273295019.6
像上面这样的东西就是我想要的东西。
以下是代码
---- Method 2 : split string based on both semi colon and comma
CREATE FUNCTION [dbo].[ufn_Parserstring] ( @StringInput VARCHAR(max) )
RETURNS @OutputTable TABLE ( [String] VARCHAR(max) )
AS
BEGIN
DECLARE @String VARCHAR(max)
WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(',', @StringInput) - 1, -1),
LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(',', @StringInput), 0),
LEN(@StringInput)) + 1, LEN(@StringInput))
INSERT INTO @OutputTable ( [String] )
VALUES ( @String )
END
RETURN
END
Go
答案 0 :(得分:0)
我使用动态查询和cursor
来获得预期结果。试试这个并告诉我它是否符合你的要求。
使用针对具有多行的单个列的select查询更改“SELECT Column1 FROM YourTableName
”查询。
DECLARE @Current VARCHAR(100)
DECLARE @QueryString NVARCHAR(MAX)
DECLARE Cursor1 CURSOR FOR
SELECT Column1 FROM YourTableName
SET @QueryString = 'SELECT '
OPEN Cursor1
FETCH NEXT FROM Cursor1 INTO @Current
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Cursor1 INTO @Current
SET @QueryString = @QueryString + ISNULL(@Current, 'NULL') + ', '
END
CLOSE Cursor1
DEALLOCATE Cursor1
SELECT @QueryString = SUBSTRING(@QueryString, 0, LEN(@QueryString) - 1)
EXEC SP_EXECUTESQL @QueryString