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'')
REPLACE(REPLACE(REPLACE(myTextColumn,'' '','' %''),''% '',''''),''%'','''')
La declaración anterior funcionó de manera excelente para reemplazar múltiples espacios con un solo espacio. Opcionalmente, agregue LTRIM
y RTRIM
para eliminar espacios al principio.
Lo obtuve desde aquí: http://burnignorance.com/database-tips-and-tricks/remove-multiple-spaces-from-a-string-using-sql-server/
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
select
string = replace(
replace(
replace('' select single spaces'','' '',''<>'')
,''><'','''')
,''<>'','' '')
Reemplace los espacios duplicados con un solo espacio en T-SQL