¿Cuál es la mejor manera de eliminar todos los espacios de una cadena en SQL Server 2008?
LTRIM(RTRIM(' a b '))
eliminaría todos los espacios a la derecha e izquierda de la cadena, pero también necesito eliminar el espacio en el medio.
¿Cuál es la mejor manera de eliminar todos los espacios de una cadena en SQL Server 2008?
LTRIM(RTRIM(' a b '))
eliminaría todos los espacios a la derecha e izquierda de la cadena, pero también necesito eliminar el espacio en el medio.
Respuestas:
Simplemente reemplácelo;
SELECT REPLACE(fld_or_variable, ' ', '')
Editar:
solo para aclarar; es un reemplazo global, no hay necesidad trim()
o preocupación por múltiples espacios para char
o varchar
:
create table #t (
c char(8),
v varchar(8))
insert #t (c, v) values
('a a' , 'a a' ),
('a a ' , 'a a ' ),
(' a a' , ' a a' ),
(' a a ', ' a a ')
select
'"' + c + '"' [IN], '"' + replace(c, ' ', '') + '"' [OUT]
from #t
union all select
'"' + v + '"', '"' + replace(v, ' ', '') + '"'
from #t
Resultado
IN OUT
===================
"a a " "aa"
"a a " "aa"
" a a " "aa"
" a a " "aa"
"a a" "aa"
"a a " "aa"
" a a" "aa"
" a a " "aa"
REPLACE(field, ' ', '')
Referencia tomada de este blog:
Primero, cree una tabla de muestra y datos:
CREATE TABLE tbl_RemoveExtraSpaces
(
Rno INT
,Name VARCHAR(100)
)
GO
INSERT INTO tbl_RemoveExtraSpaces VALUES (1,'I am Anvesh Patel')
INSERT INTO tbl_RemoveExtraSpaces VALUES (2,'Database Research and Development ')
INSERT INTO tbl_RemoveExtraSpaces VALUES (3,'Database Administrator ')
INSERT INTO tbl_RemoveExtraSpaces VALUES (4,'Learning BIGDATA and NOSQL ')
GO
Script para SELECCIONAR cadena sin espacios adicionales:
SELECT
[Rno]
,[Name] AS StringWithSpace
,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
FROM tbl_RemoveExtraSpaces
Resultado:
Rno StringWithSpace StringWithoutSpace
----------- ----------------------------------------- ---------------------------------------------
1 I am Anvesh Patel I am Anvesh Patel
2 Database Research and Development Database Research and Development
3 Database Administrator Database Administrator
4 Learning BIGDATA and NOSQL Learning BIGDATA and NOSQL
100% de trabajo
UPDATE table_name SET "column_name"=replace("column_name", ' ', ''); //Remove white space
UPDATE table_name SET "column_name"=replace("column_name", '\n', ''); //Remove newline
UPDATE table_name SET "column_name"=replace("column_name", '\t', ''); //Remove all tab
Puedes usar "column_name"
ocolumn_name
Gracias
Subroto
select replace(replace(replace(varcharColumn,char(13),''),char(10),''),' ','')
para eliminar todas las líneas nuevas y espacios de una varchar
columna. Si usé '\ n' y '\ r' en lugar de char (13) y char (10) no funcionó.
t-sql reemplaza http://msdn.microsoft.com/en-us/library/ms186862.aspx
reemplazar (val, '', '')
Si hay varios espacios en blanco en una cadena, reemplazar puede no funcionar correctamente. Para eso, se debe utilizar la siguiente función.
CREATE FUNCTION RemoveAllSpaces
(
@InputStr varchar(8000)
)
RETURNS varchar(8000)
AS
BEGIN
declare @ResultStr varchar(8000)
set @ResultStr = @InputStr
while charindex(' ', @ResultStr) > 0
set @ResultStr = replace(@InputStr, ' ', '')
return @ResultStr
END
Ejemplo:
select dbo.RemoveAllSpaces('aa aaa aa aa a')
Salida:
aaaaaaaaaa
Esto hace el truco de eliminar los espacios en las cadenas:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
En caso de que necesite RECORTAR espacios en todas las columnas, puede usar este script para hacerlo dinámicamente:
--Just change table name
declare @MyTable varchar(100)
set @MyTable = 'MyTable'
--temp table to get column names and a row id
select column_name, ROW_NUMBER() OVER(ORDER BY column_name) as id into #tempcols from INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('varchar', 'nvarchar') and TABLE_NAME = @MyTable
declare @tri int
select @tri = count(*) from #tempcols
declare @i int
select @i = 0
declare @trimmer nvarchar(max)
declare @comma varchar(1)
set @comma = ', '
--Build Update query
select @trimmer = 'UPDATE [dbo].[' + @MyTable + '] SET '
WHILE @i <= @tri
BEGIN
IF (@i = @tri)
BEGIN
set @comma = ''
END
SELECT @trimmer = @trimmer + CHAR(10)+ '[' + COLUMN_NAME + '] = LTRIM(RTRIM([' + COLUMN_NAME + ']))'+@comma
FROM #tempcols
where id = @i
select @i = @i+1
END
--execute the entire query
EXEC sp_executesql @trimmer
drop table #tempcols
si desea eliminar espacios, - y otro texto de la cadena, use lo siguiente:
supongamos que tiene un número de teléfono móvil en su tabla como '718-378-4957' o '7183784957' y desea reemplazar y obtener el número de teléfono móvil y luego usar el siguiente texto.
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
Resultado: - 7183784957
Para completar todas las respuestas anteriores, hay publicaciones adicionales en StackOverflow sobre cómo lidiar con TODOS los caracteres de espacios en blanco (consulte https://en.wikipedia.org/wiki/Whitespace_character para obtener una lista completa de estos caracteres):
replace (replace (column_Name, CHAR (13), ''), CHAR (10), '')
Esto es útil para mí:
CREATE FUNCTION dbo.TRIM(@String VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
RETURN LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,CHAR(10),'[]'),CHAR(13),'[]'),char(9),'[]'),CHAR(32),'[]'),'][',''),'[]',CHAR(32))));
END
GO
.
Tuve este problema hoy y reemplazar / recortar hizo el truco ... ver a continuación.
update table_foo
set column_bar = REPLACE(LTRIM(RTRIM(column_bar)), ' ', '')
antes y después de :
old-bad: column_bar | New-fixed: column_bar
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
LTRIM
& RTRIM
?
Para eliminar los espacios en una cadena izquierda y derecha. Para quitar espacio en el medio de uso Replace
.
Puede usar RTRIM()
para eliminar espacios de la derecha y LTRIM()
para eliminar espacios de la izquierda, por lo tanto, los espacios izquierdo y derecho se eliminan de la siguiente manera:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
Una versión funcional (udf) que elimina espacios, cr, lf, tabuladores o configurables.
select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S
Resultado: '234asdfwefwef3x'
alter function Common.RemoveWhitespace
(
@pString nvarchar(max),
@pWhitespaceCharsOpt nvarchar(max) = null -- default: tab, lf, cr, space
)
returns nvarchar(max) as
/*--------------------------------------------------------------------------------------------------
Purpose: Compress whitespace
Example: select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as s
-- Result: 234asdfwefwef3x
Modified By Description
---------- ----------- --------------------------------------------------------------------
2018.07.24 crokusek Initial Version
--------------------------------------------------------------------------------------------------*/
begin
declare
@maxLen bigint = 1073741823, -- (2^31 - 1) / 2 (https://stackoverflow.com/a/4270085/538763)
@whitespaceChars nvarchar(30) = coalesce(
@pWhitespaceCharsOpt,
char(9) + char(10) + char(13) + char(32)); -- tab, lf, cr, space
declare
@whitespacePattern nvarchar(30) = '%[' + @whitespaceChars + ']%',
@nonWhitespacePattern nvarchar(30) = '%[^' + @whitespaceChars + ']%',
@previousString nvarchar(max) = '';
while (@pString != @previousString)
begin
set @previousString = @pString;
declare
@whiteIndex int = patindex(@whitespacePattern, @pString);
if (@whiteIndex > 0)
begin
declare
@whitespaceLength int = nullif(patindex(@nonWhitespacePattern, substring(@pString, @whiteIndex, @maxLen)), 0) - 1;
set @pString =
substring(@pString, 1, @whiteIndex - 1) +
iif(@whiteSpaceLength > 0, substring(@pString, @whiteIndex + @whiteSpaceLength, @maxLen), '');
end
end
return @pString;
end
go
Por alguna razón, el reemplazo funciona solo con una cadena cada vez. Tenía una cadena como esta " Test MSP " y quiero dejar solo un espacio.
Utilicé el enfoque que hizo @Farhan, pero con algunas modificaciones:
CREATE FUNCTION ReplaceAll
(
@OriginalString varchar(8000),
@StringToRemove varchar(20),
@StringToPutInPlace varchar(20)
)
RETURNS varchar(8000)
AS
BEGIN
declare @ResultStr varchar(8000)
set @ResultStr = @OriginalString
while charindex(@StringToRemove, @ResultStr) > 0
set @ResultStr = replace(@ResultStr, @StringToRemove, @StringToPutInPlace)
return @ResultStr
END
Luego ejecuto mi actualización así
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, ' ', ' ') WHERE ID = 14225
Entonces obtuve este resultado: Prueba MSP
Publicando aquí si en caso de que alguien lo necesite como yo lo hice.
Ejecutando en: Microsoft SQL Server 2016 (SP2)
Verifique y pruebe el siguiente script (Unidad probada):
--Declaring
DECLARE @Tbl TABLE(col_1 VARCHAR(100));
--Test Samples
INSERT INTO @Tbl (col_1)
VALUES
(' EY y
Salem')
, (' EY P ort Chennai ')
, (' EY Old Park ')
, (' EY ')
, (' EY ')
,(''),(null),('d
f');
SELECT col_1 AS INPUT,
LTRIM(RTRIM(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(col_1,CHAR(10),' ')
,CHAR(11),' ')
,CHAR(12),' ')
,CHAR(13),' ')
,CHAR(14),' ')
,CHAR(160),' ')
,CHAR(13)+CHAR(10),' ')
,CHAR(9),' ')
,' ',CHAR(17)+CHAR(18))
,CHAR(18)+CHAR(17),'')
,CHAR(17)+CHAR(18),' ')
)) AS [OUTPUT]
FROM @Tbl;
Parece que todos siguen refiriéndose a una sola función REPLACE. O incluso muchas llamadas de una función REPLACE. Pero cuando tiene una salida dinámica con un número desconocido de espacios, no funcionará. Cualquiera que se ocupe de este problema regularmente sabe que REPLACE solo eliminará un espacio, NO TODOS, como debería. Y LTRIM y RTRIM parecen tener el mismo problema. Déjalo en manos de Microsoft. Aquí hay una salida de muestra que utiliza un bucle WHILE para eliminar TODOS los valores CHAR (32) (espacio).
DECLARE @INPUT_VAL VARCHAR(8000)
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @INPUT_VAL = ' C A '
SET @OUTPUT_VAL = @INPUT_VAL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
PRINT 'START:' + @INPUT_VAL + ':END'
PRINT 'START:' + @OUTPUT_VAL + ':END'
Aquí está la salida del código anterior:
START: C A :END
START:CA:END
Ahora, para ir un paso más allá y utilizarlo en una instrucción UPDATE o SELECT, cámbielo a udf.
CREATE FUNCTION udf_RemoveSpaces (@INPUT_VAL VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @OUTPUT_VAL = @INPUT_VAL
-- ITTERATE THROUGH STRING TO LOOK FOR THE ASCII VALUE OF SPACE (CHAR(32)) REPLACE IT WITH BLANK, NOT NULL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
RETURN @OUTPUT_VAL
END
Luego utilice la función en una instrucción SELECT o INSERT:
UPDATE A
SET STATUS_REASON_CODE = WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE
INSERT INTO SOMETABLE
(STATUS_REASON_CODE)
SELECT WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE