Usando ASCII(RIGHT(ProductAlternateKey, 1))
puede ver que el carácter más a la derecha en la fila 2 es un avance de línea o un carácter Ascii 10.
Esto no puede eliminarse usando el estándar LTrim
RTrim
funciones.
Sin embargo, podría usar (REPLACE(ProductAlternateKey, CHAR(10), '')
También es posible que desee tener en cuenta los retornos de carro y las tabulaciones. Estos tres (saltos de línea, retornos de carro y tabulaciones) son los culpables habituales y se pueden eliminar con lo siguiente:
LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(ProductAlternateKey, CHAR(10), ''), CHAR(13), ''), CHAR(9), '')))
Si encuentra más caracteres de "espacio en blanco" que no se pueden eliminar con lo anterior, intente uno o todos los siguientes:
--NULL
Replace([YourString],CHAR(0),'');
--Horizontal Tab
Replace([YourString],CHAR(9),'');
--Line Feed
Replace([YourString],CHAR(10),'');
--Vertical Tab
Replace([YourString],CHAR(11),'');
--Form Feed
Replace([YourString],CHAR(12),'');
--Carriage Return
Replace([YourString],CHAR(13),'');
--Column Break
Replace([YourString],CHAR(14),'');
--Non-breaking space
Replace([YourString],CHAR(160),'');
Esta lista de posibles espacios en blanco podría usarse para crear una función como:
Create Function [dbo].[CleanAndTrimString]
(@MyString as varchar(Max))
Returns varchar(Max)
As
Begin
--NULL
Set @MyString = Replace(@MyString,CHAR(0),'');
--Horizontal Tab
Set @MyString = Replace(@MyString,CHAR(9),'');
--Line Feed
Set @MyString = Replace(@MyString,CHAR(10),'');
--Vertical Tab
Set @MyString = Replace(@MyString,CHAR(11),'');
--Form Feed
Set @MyString = Replace(@MyString,CHAR(12),'');
--Carriage Return
Set @MyString = Replace(@MyString,CHAR(13),'');
--Column Break
Set @MyString = Replace(@MyString,CHAR(14),'');
--Non-breaking space
Set @MyString = Replace(@MyString,CHAR(160),'');
Set @MyString = LTRIM(RTRIM(@MyString));
Return @MyString
End
Go
Que luego podría usar de la siguiente manera:
Select
dbo.CleanAndTrimString(ProductAlternateKey) As ProductAlternateKey
from DimProducts