2010-11-16 140 views
1

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

+0

哪个RDBMS? 2更多去 – 2010-11-16 20:11:23

+0

哇,这是我的愚蠢没有指定。 – 2010-11-16 20:12:30

回答

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 

您可以修改此需要(在SQL Server 2008中使用T-SQL)。你没有真正指定你需要做什么,所以这只是将它们打印到消息控制台。

+1

谢谢,这足以得到我需要的结果。 – 2010-11-16 20:29:05

+0

@Andrew - 高兴帮忙 – JNK 2010-11-16 20:37:49

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中

+0

你在'ABCD'后错过了一个结束报价...... – JNK 2010-11-16 20:28:27

+0

当我尝试在SET之后添加一个空行时必须完成。哦,井。 :) – JeffM 2010-11-16 20:31:16

+0

不幸的是,抽签太迟了;如果我也可以upvote你我也 – 2010-11-16 20:42:24

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; 
+0

那么,你已经晚了四年,但我很欣赏努力 – 2014-10-20 20:53:04

+0

@Andrew刚刚完成它,因为我有同样的问题。 – Trisped 2014-10-20 20:59:56