1

我在表中有类似以下数据的内容:

id    str
--    --------------------
 1    123,456,234
 2    17,54,22
 3    4,7
 4    432
 5    1,82,2

我想要一个 SELECT 语句,它会给我分离的 id 和 str 值。例如,我想要上面示例的以下输出:

id     str
--     ----------
 1     123
 1     456
 1     234
 2     17
 2     54

etc

如何在 sqlserver 2008 中获得此结果?

4

1 回答 1

3

你可以使用一个Split函数。我正在使用这个:

CREATE FUNCTION [dbo].[Split]
(
    @ItemList NVARCHAR(MAX), 
    @delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))  
AS      

BEGIN    
    DECLARE @tempItemList NVARCHAR(MAX)
    SET @tempItemList = @ItemList

    DECLARE @i INT    
    DECLARE @Item NVARCHAR(4000)

    SET @tempItemList = REPLACE (@tempItemList, ' ', '')
    SET @i = CHARINDEX(@delimiter, @tempItemList)

    WHILE (LEN(@tempItemList) > 0)
    BEGIN
        IF @i = 0
            SET @Item = @tempItemList
        ELSE
            SET @Item = LEFT(@tempItemList, @i - 1)
        INSERT INTO @IDTable(Item) VALUES(@Item)
        IF @i = 0
            SET @tempItemList = ''
        ELSE
            SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
        SET @i = CHARINDEX(@delimiter, @tempItemList)
    END 
    RETURN
END  

现在您可以使用CROSS APPLY

SELECT Id, Item As Str
FROM dbo.TableName
CROSS APPLY dbo.Split(str, ',')

内连接与交叉应用

使用您的示例数据进行演示。

ID  STR
1   123
1   456
1   234
2   17
2   54
2   22
3   4
3   7
4   432
5   1
5   82
5   2
于 2013-06-14T14:19:59.440 回答