rtrim quitar para metodo intermedios espacios eliminar detectar buscar blanco agregar sql

quitar - Método SQL para reemplazar los espacios en blanco de repetición con espacios en blanco individuales



quitar espacios string javascript (13)

¿Hay una manera más elegante de hacer esto? Quiero reemplazar los espacios en blanco que se repiten con espacios en blanco simples ....

declare @i int set @i=0 while @i <= 20 begin update myTable set myTextColumn = replace(myTextColumn, '' '', '' '') set @i=@i+1 end

(su servidor SQL 2000 - pero preferiría SQL genérico)


Aquí hay una forma simple basada en conjuntos que colapsará múltiples espacios en un solo espacio aplicando tres reemplazos.

DECLARE @myTable TABLE (myTextColumn VARCHAR(50)) INSERT INTO @myTable VALUES (''0Space'') INSERT INTO @myTable VALUES ('' 1 Spaces 1 Spaces. '') INSERT INTO @myTable VALUES ('' 2 Spaces 2 Spaces. '') INSERT INTO @myTable VALUES ('' 3 Spaces 3 Spaces. '') INSERT INTO @myTable VALUES ('' 4 Spaces 4 Spaces. '') INSERT INTO @myTable VALUES ('' 5 Spaces 5 Spaces. '') INSERT INTO @myTable VALUES ('' 6 Spaces 6 Spaces. '') select replace( replace( replace( LTrim(RTrim(myTextColumn)), ---Trim the field '' '','' |''), ---Mark double spaces ''| '',''''), ---Delete double spaces offset by 1 ''|'','''') ---Tidy up AS SingleSpaceTextColumn from @myTable

Su declaración de actualización ahora se puede establecer en base:

update @myTable set myTextColumn = replace( replace( replace( LTrim(RTrim(myTextColumn)), '' '','' |''), ''| '',''''), ''|'','''')

Use una cláusula Where apropiada para limitar la Actualización solo a las filas que necesita actualizar o quizás tenga espacios dobles.

Ejemplo:

where 1<=Patindex(''% %'', myTextColumn)

He encontrado un informe externo sobre este método: REEMPLAZAR múltiples espacios con uno


Aquí hay una solución más simple :)

update myTable set myTextColumn = replace(replace(replace(LTrim(RTrim(myTextColumn )),'' '',''<>''),''><'',''''),''<>'','' '')


Digamos, sus datos como este

Table name : userdata Field: id, comment, status, id, "I love -- -- - -spaces -- - my INDIA" , "Active" <br> id, "I love -- -- - -spaces -- - my INDIA" , "Active" <br> id, "I love -- -- - -spaces -- - my INDIA" , "Active" <br> id, "I love -- -- - -spaces -- - my INDIA" , "Active" <br>

Así que haz así

update userdata set comment=REPLACE(REPLACE(comment," ","-SPACEHERE-"),"-SPACEHERE"," ");

No lo probé, pero creo que esto funcionará.


Esto funciona:

UPDATE myTable SET myTextColumn = REPLACE( REPLACE( REPLACE(myTextColumn ,'' '','' ''+CHAR(1)) -- CHAR(1) is unlikely to appear ,CHAR(1)+'' '','''') ,CHAR(1),'''') WHERE myTextColumn LIKE ''% %''

Basado enteramente en el conjunto; sin bucles

Así que reemplazamos cualquiera de los dos espacios con un carácter inusual y un espacio. Si llamamos al carácter inusual X, 5 espacios se convierten en: ''XX'' y 6 espacios se convierten en ''XX X''. Luego reemplazamos ''X'' con la cadena vacía. Entonces, 5 espacios se convierten en '''' y 6 espacios se convierten en ''X''. Luego, en caso de que hubiera un número par de espacios, eliminamos cualquier ''X'' restante, dejando un solo espacio.


No muy basado en SET pero un simple WHILE haría el truco.

CREATE TABLE #myTable (myTextColumn VARCHAR(32)) INSERT INTO #myTable VALUES (''NoSpace'') INSERT INTO #myTable VALUES (''One Space'') INSERT INTO #myTable VALUES (''Two Spaces'') INSERT INTO #myTable VALUES (''Multiple Spaces .'') WHILE EXISTS (SELECT * FROM #myTable WHERE myTextColumn LIKE ''% %'') UPDATE #myTable SET myTextColumn = REPLACE(myTextColumn, '' '', '' '') WHERE myTextColumn LIKE ''% %'' SELECT * FROM #myTable DROP TABLE #myTable


Para mí, los ejemplos anteriores casi hicieron un truco pero necesitaba algo que fuera más estable e independiente de la tabla o columna o un número determinado de iteraciones. Así que esta es mi modificación de la mayoría de las consultas anteriores.

CREATE FUNCTION udfReplaceAll ( @OriginalText NVARCHAR(MAX), @OldText NVARCHAR(MAX), @NewText NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) AS BEGIN WHILE (@OriginalText LIKE ''%'' + @OldText + ''%'') BEGIN SET @OriginalText = REPLACE(@OriginalText,@OldText,@NewText) END RETURN @OriginalText END GO


Prueba esto:

UPDATE Ships SET name = REPLACE(REPLACE(REPLACE(name, '' '', '' '' + CHAR(1)), CHAR(1) + '' '', ''''), CHAR(1), '''') WHERE name LIKE ''% %''


Recorra los caracteres uno por uno y mantenga un registro del carácter anterior. Si el carácter actual es un espacio, y el último carácter es un espacio, stuff .

CREATE FUNCTION [dbo].[fnRemoveExtraSpaces] (@Number AS varchar(1000)) Returns Varchar(1000) As Begin Declare @n int -- Length of counter Declare @old char(1) Set @n = 1 --Begin Loop of field value While @n <=Len (@Number) BEGIN If Substring(@Number, @n, 1) = '' '' AND @old = '' '' BEGIN Select @Number = Stuff( @Number , @n , 1 , '''' ) END Else BEGIN SET @old = Substring(@Number, @n, 1) Set @n = @n + 1 END END Return @number END GO select [dbo].[fnRemoveExtraSpaces](''xxx xxx xxx xxx'')



SELECT ''starting...'' --sets @@rowcount WHILE @@rowcount <> 0 update myTable set myTextColumn = replace(myTextColumn, '' '', '' '') where myTextColumn like ''% %''


Update myTable set myTextColumn = replace(myTextColumn, '' '', '' '');

La consulta anterior eliminará todos los espacios en blanco dobles con un solo espacio en blanco

Pero esto funcionaría solo una vez.


create table blank( field_blank char(100)) insert into blank values(''yyy yyyy'') insert into blank values(''xxxx xxxx'') insert into blank values (''xxx xxx'') insert into blank values (''zzzzzz zzzzz'') update blank set field_blank = substring(field_blank,1,charindex('' '',field_blank)-1) + '' '' + ltrim(substring(field_blank,charindex('' '',field_blank) + 1,len(field_blank))) where CHARINDEX ('' '' , rtrim(field_blank)) > 1 select * from blank