0

文字列を受け取り、数値以外の文字をテーブルから取得した 2 つの数字に置き換える必要がある関数を作成しています。これは、文字列を調べて数字以外の文字を見つけるために使用するコードです。

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 によってテーブルから取得した 2 つの数字に置き換える必要があります。例えば

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

結論として、次の文字列 '1a2a3a4a' があり、'a' の置換が '88' の場合、結果の文字列は '188288388488' になります。

助けてくれてありがとう。

さよなら!

4

2 に答える 2

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 フィドルのデモ

于 2013-07-19T08:43:42.287 に答える
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
于 2013-07-19T08:44:40.740 に答える