2013-07-19 96 views
0

我正在寫一個函數,它接受一個字符串並必須用從表格中取出的兩個數字字符替換任何非數字字符。這是我用它來探索串並找到非數字字符代碼:SQL - 替換字符串中的非數字字符

SET @string = '1a2b3c4d' 
SET @wcount= 0 
SET @index = 1 
SET @len= LEN(@string) 

WHILE @index<= @len 
BEGIN 
    SET @char = SUBSTRING(@string, @index, 1) 
    IF @char LIKE '%[a-z]%' 
     PRINT 'char ' + CONVERT(varchar(10), @index) 
    ELSE 
     PRINT @char 
    SET @index= @index+ 1 
END 

輸出以下

1 
char 2 
2 
char 4 
3 
char 6 
4 
char 8 

現在,當我找到一個非數字字符我有用一個select從表中取出的兩個數字字符替換它。例如。

SELECT @temp = REPLACEMENT FROM Conversion_Tab WHERE EXPR = @char 

總之,如果我有以下字符串「1a2a3a4a」,並更換爲「一」是「88」所產生的字符串應該是提前任何幫助「188288388488」

感謝。

再見!

回答

2

試試這個

DECLARE @string VARCHAR(100) 
DECLARE @outstring VARCHAR(100) 
DECLARE @wcount INT 
DECLARE @temp INT 
DECLARE @index INT 
DECLARE @len INT 
DECLARE @char CHAR 

SET @string = '1a2a3a4a' 
SET @wcount= 0 
SET @index = 1 
SET @len= LEN(@string) 

SET @outstring = '' 

WHILE @index<= @len 
BEGIN 
    SET @char = SUBSTRING(@string, @index, 1) 
    IF @char LIKE '%[a-z]%' 
    BEGIN 
     SELECT @temp = REPLACEMENT FROM #Conversion_Tab WHERE EXPR = @char 
     SET @outstring = @outstring + CONVERT(VARCHAR(10),@temp) 
    END 
    ELSE 
    BEGIN 
     SET @outstring = @outstring + @char 
    END 
    SET @index= @index+ 1 

END 

SELECT @outstring 

SQL FIDDLE DEMO

0

看起來像你需要ISNUMERIC()。所以如果不是isnumeric(char)將其替換爲您的查找值。

從對方的回答中獲得,但產生相同的結果

DECLARE @string VARCHAR(100) 
DECLARE @outstring VARCHAR(100) 
DECLARE @wcount INT 
DECLARE @temp INT 
DECLARE @index INT 
DECLARE @len INT 
DECLARE @char CHAR 

SET @string = '1a2a3a4a' 
SET @wcount= 0 
SET @index = 1 
SET @len= LEN(@string) 

SET @outstring = '' 

WHILE @index<= @len 
BEGIN 
    SET @char = SUBSTRING(@string, @index, 1) 
    IF ISNUMERIC(@char) = 0 
    BEGIN 
     SELECT @temp = REPLACEMENT FROM #Conversion_Tab WHERE EXPR = @char 
     SET @outstring = @outstring + CONVERT(VARCHAR(10),@temp) 
    END 
    ELSE 
    BEGIN 
     SET @outstring = @outstring + @char 
    END 
    SET @index= @index+ 1 

END