将SQL字符串转换为字符列表

时间:2010-11-16 20:02:22

标签: sql stored-procedures

在我正在编写的存储过程中,我需要将字符串(例如'ABCD')转换为其组成字符列表(例如('A','B','C','D'))。有没有一种简单的方法可以做到这一点?

(在SQL Server 2008中使用T-SQL。)

3 个答案:

答案 0 :(得分:3)

DECLARE @Str varchar(100)
DECLARE @StrT varchar(100)

SET @Str = 'ABCDEFG'

WHILE LEN(@Str) > 0
 BEGIN
 SET @StrT = LEFT(@Str, 1)
 RAISERROR (@StrT, 0, 0) WITH NOWAIT
 SELECT @Str = RIGHT(@Str, (LEN(@STR) - 1))
 END

您可以根据需要进行修改。你没有真正指定你需要对字母做什么,所以这只是将它们打印到消息控制台。

答案 1 :(得分:2)

DECLARE @MyString varchar(100)
SET @MyString = 'ABCD'

WHILE LEN(@MyString) > 0 
 BEGIN
 SELECT LEFT(@MyString, 1)
 SET @MyString = RIGHT(@MyString, (LEN(@MyString) - 1))
END

这适用于SQL Server 2008。

答案 2 :(得分:1)

建立JNK's answer

DECLARE @start nvarchar(MAX);
DECLARE @output nvarchar(MAX);

SELECT @start = 'ABCDEFG', @output = '';

WHILE LEN(@start) > 0
    BEGIN
        SET @output = @output + '''' + LEFT(@start, 1) + ''',';
        SELECT @start = RIGHT(@start, (LEN(@start) - 1))
    END

SELECT CASE WHEN LEN(@output) > 0 THEN LEFT(@output, (LEN(@output) - 1)) ELSE NULL END;

这将为您提供所需的格式。

我个人更喜欢以下内容,因为使用表格数据更容易:

DECLARE @start nvarchar(MAX);
DECLARE @output TABLE (value nchar(1));

SET @start = 'ABCDEFG'+NCHAR(1121);

WHILE LEN(@start) > 0
    BEGIN
        INSERT INTO @output (value) VALUES (LEFT(@start, 1));
        SELECT @start = RIGHT(@start, (LEN(@start) - 1))
    END

SELECT value, CAST(value AS varbinary(4)) AS hex FROM @output;