Метод SQL для замены повторяющихся пробелов одиночными пробелами
Есть ли более элегантный способ сделать это. Я хочу заменить повторяющиеся пробелы одиночными пробелами....
declare @i int
set @i=0
while @i <= 20
begin
update myTable
set myTextColumn = replace(myTextColumn, ' ', ' ')
set @[email protected]+1
end
(его SQL Server 2000 - но я бы предпочел общий SQL)
Ответы
Ответ 1
Вот простой способ, основанный на множестве, который скроет несколько пространств в одно пространство, применив три замены.
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
Теперь ваш оператор обновления можно установить на основе:
update @myTable
set myTextColumn = replace(
replace(
replace(
LTrim(RTrim(myTextColumn)),
' ',' |'),
'| ',''),
'|','')
Используйте соответствующее предложение Where, чтобы ограничить обновление только теми строками, которые вам нужно обновить или, возможно, иметь двойные пробелы.
Пример:
where 1<=Patindex('% %', myTextColumn)
Я нашел внешнюю запись по этому методу: ЗАМЕНИТЬ несколько пространств с одним
Ответ 2
Это работает:
UPDATE myTable
SET myTextColumn =
REPLACE(
REPLACE(
REPLACE(myTextColumn
,' ',' '+CHAR(1)) -- CHAR(1) is unlikely to appear
,CHAR(1)+' ','')
,CHAR(1),'')
WHERE myTextColumn LIKE '% %'
Полностью установленный; нет циклов.
Итак, мы заменяем любые два пространства необычным символом и пространством. Если мы назовем необычный символ X, то 5 пространств станут: "X X" и 6 пробелов становятся "X X X". Затем мы заменяем 'X' пустой строкой. Итак, 5 пробелов становятся '', а 6 пробелов становятся "X". Затем, если бы было четное число пробелов, мы удаляем оставшиеся "X", оставляя одно место.
Ответ 3
select
string = replace(
replace(
replace(' select single spaces',' ','<>')
,'><','')
,'<>',' ')
Заменить повторяющиеся пробелы одним пространством в T-SQL
Ответ 4
Не очень SET, но простой WHILE
выполнит трюк.
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
Ответ 5
SELECT 'starting...' --sets @@rowcount
WHILE @@rowcount <> 0
update myTable
set myTextColumn = replace(myTextColumn, ' ', ' ')
where myTextColumn like '% %'
Ответ 6
Пройдите по символам один за другим и сохраните запись предыдущего символа. Если текущий символ - это пробел, а последний символ - пробел, stuff
it.
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')
Ответ 7
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
Ответ 8
Для меня приведенные выше примеры почти сделали трюк, но мне нужно что-то более стабильное и независимое от таблицы или столбца или заданного количества итераций. Так что это моя модификация из большинства вышеперечисленных запросов.
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
Ответ 9
Скажем, ваши данные как это
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>
Итак, просто сделайте это
update userdata set comment=REPLACE(REPLACE(comment," ","-SPACEHERE-"),"-SPACEHERE"," ");
Я не тестировал, но думаю, что это сработает.
Ответ 10
Вот простейшее решение:)
update myTable
set myTextColumn = replace(replace(replace(LTrim(RTrim(myTextColumn )),' ','<>'),'><',''),'<>',' ')
Ответ 11
Попробуйте следующее:
UPDATE Ships
SET name = REPLACE(REPLACE(REPLACE(name, ' ', ' ' + CHAR(1)), CHAR(1) + ' ', ''), CHAR(1), '')
WHERE name LIKE '% %'
Ответ 12
REPLACE(REPLACE(REPLACE(myTextColumn,' ',' %'),'% ',''),'%','')
Вышеприведенный оператор работал ужасно для замены нескольких пробелов одним пробелом. При желании добавьте LTRIM
и RTRIM
, чтобы удалить пробелы в начале.
Получил это отсюда: http://burnignorance.com/database-tips-and-tricks/remove-multiple-spaces-from-a-string-using-sql-server/
Ответ 13
WHILE
(SELECT count(myIDcolumn)
from myTable where myTextColumn like '% %') > 0
BEGIN
UPDATE myTable
SET myTextColumn = REPLACE(myTextColumn ,' ',' ')
END
Ответ 14
Попробуйте:
CREATE OR REPLACE FUNCTION REM_SPACES (TEXTO VARCHAR(2000))
RETURNS VARCHAR(2000)
LANGUAGE SQL
READS SQL DATA
BEGIN
SET TEXTO = UPPER(LTRIM(RTRIM(TEXTO)));
WHILE LOCATE(' ',TEXTO,1) >= 1 DO
SET TEXTO = REPLACE(TEXTO,' ',' ');
END WHILE;
RETURN TEXTO;
END
Ответ 15
Update myTable set myTextColumn = replace(myTextColumn, ' ', ' ');
Вышеупомянутый запрос удалит все двойные пробелы с единственным пробелом
Но это будет работать только один раз.