2010-11-16 136 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