在MSSql中按列而不是每行插入已解析的字符串

时间:2014-11-20 09:17:30

标签: sql-server parsing insert

我之前问了一个关于解析字符串的问题,其中字符串是逗号和半冒号分隔。我了解流程并做了一些很好的编辑,以满足我的需求。现在我的问题是返回的结果是在一列中,而不是每列的解析数据的一部分。

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

1 个答案:

答案 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