KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
This code basically translates characters based on position in one string to the character at the same position in another string and it runs for all rows in the table. When I run this (simplified version): DECLARE @R char(40) DECLARE @U char(40) SET @R=' abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+'+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 I get the following: RowID readable ----------- --------------------------------------- 1 a simple translation 2 hello world 3 wow you ran this But need: RowID readable ----------- --------------------------------------- 1 a simple translation 2 hello world 3 wow you ran this Is there any way, other than REPLACE() , to have the spaces show up properly? This also happens on line breaks, in my actual code. Can this be rewritten in a better way? I basically just used the FOR XML PATH('') to concatenate the individual row values together.
Tags (comma-separated)
Save Edits
Cancel