このコードは、ある文字列の位置に基づく文字を基本的に別の文字列の同じ位置にある文字に変換し、テーブル内のすべての行に対して実行します。FOR XML PATH( ''): "特殊"文字をエスケープする
私はこの(簡易版)を実行します。
DECLARE @R char(40)
DECLARE @U char(40)
SET @R=' [email protected]#$%^&*()_+'+char(181)
SET @U=REVERSE(@R)
DECLARE @TestTable TABLE (RowID int identity(1,1) primary key, Unreadable varchar(500))
INSERT INTO @TestTable VALUES ('+µt$zw!*µsu+yt!+s$xy')
INSERT INTO @TestTable VALUES ('%*!!xµpxu!(')
INSERT INTO @TestTable VALUES ('pxpµnxrµu+yµs%$t')
;WITH CodeValues AS
(
SELECT
Number,SUBSTRING(@R,Number,1) AS R,ASCII(SUBSTRING(@U,Number,1)) AS UA
FROM Numbers
WHERE Number<=LEN(@R)
)
SELECT
t.RowID
,(SELECT
''+c.R
FROM Numbers n
INNER JOIN CodeValues c ON ASCII(SUBSTRING(t.Unreadable,n.Number,1))=c.UA
WHERE n.Number<=LEN(t.Unreadable)
FOR XML PATH('')
) AS readable
FROM @TestTable t
私は、次を得る:
RowID readable
----------- ---------------------------------------
1 a simple translation
2 hello world
3 wow you ran this
しかし必要性:
RowID readable
----------- ---------------------------------------
1 a simple translation
2 hello world
3 wow you ran this
REPLACE()
以外のどのような方法がありますスペースを適切に表示させるには?これは私の実際のコードで改行にも起こります。
これは、より良い方法で書き直すことができますか?私は基本的にはFOR XML PATH('')
を使用して個々の行の値を連結しました。
Iこれが実際のコードであることを確信していますが、同じ問題を説明する簡単な例を実際に投稿してください。それは問題がかなり簡単になる可能性があるが、消化するコードはかなり奇妙である。 –
@ジョン・サンダース、私はこれが私の "本当のコード"だったと思う。申し訳ありませんが、最終的なコードはより複雑になります。これは、1つのクエリの一部であるためです。 –