Solución:
Versión en línea:
create function [dbo].[remove_non_printable_chars] (@input_string nvarchar(max))
returns table with schemabinding as return (
select
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(@input_string collate latin1_general_100_bin2,
char(1), ''),char(2), ''),char(3), ''),char(4), ''),char(5), ''),char(6), ''),char(7), ''),char(8), ''),char(9), ''),char(10), ''),
char(11), ''),char(12), ''),char(13), ''),char(14), ''),char(15), ''),char(16), ''),char(17), ''),char(18), ''),char(19), ''),char(20), ''),
char(21), ''),char(22), ''),char(23), ''),char(24), ''),char(25), ''),char(26), ''),char(27), ''),char(28), ''),char(29), ''),char(30), ''),
char(31), ''), char(0) , '')
as clean_string
);
go
Y úsalo así:
select c.clean_string
from dbo.remove_non_printable_chars(@dirtystring) c
o
select ...
, c.clean_string
from t
cross apply dbo.remove_non_printable_chars(t.dirty_string) c
Referencia:
- ¿Cuándo una función SQL no es una función? “Si no está en línea, es basura”. – Rob Farley
- Funciones escalares en línea – Itzik Ben-Gan
- Funciones escalares, alineación y rendimiento: un título entretenido para una publicación aburrida – Adam Machanic
- Funciones definidas por el usuario de TSQL: diez preguntas que era demasiado tímido para hacer – Robert Sheldon
Otra opción.
Esta función reemplazará los caracteres de control y corregirá los espacios repetidos residuales. Por ejemplo Jane Smith{13}was here
no será devuelto como Jane Smithwas here
, sino más bien Jane Smith was here
CREATE FUNCTION [dbo].[udf-Str-Strip-Control](@S varchar(max))
Returns varchar(max)
Begin
;with cte1(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)),
cte2(C) As (Select Top (32) Char(Row_Number() over (Order By (Select NULL))-1) From cte1 a,cte1 b)
Select @S = Replace(@S,C,' ')
From cte2
Return ltrim(rtrim(replace(replace(replace(@S,' ','†‡'),'‡†',''),'†‡',' ')))
End
--Select [dbo].[udf-Str-Strip-Control]('Michael '+char(13)+char(10)+'LastName') --Returns: Michael LastName
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)