chetan virkar Ответов: 2

как удалить двойной пробел и ввести в sql


Всем Привет,

Я использую Sql Server 2005

я хочу удалить двойной пробел или ввести его из столбца таблицы для этого я использую следующий код

Для этого я использую функцию RemoveSpaces
функция содержит следующий код
CREATE FUNCTION RemoveSpaces  

 (@InputString VARCHAR(1024))  
 
  RETURNS VARCHAR(1024)  
  
  AS  
  
  BEGIN  
  
    WHILE CHARINDEX('  ',@InputString) > 0  -- Checking for double spaces  
  
      SET @InputString =  
  
        REPLACE(REPLACE(REPLACE(ISNULL( @InputString, ''), CHAR(13), ''), CHAR(10), ' '),'  ',' ') -- Replace 2 spaces with 1 space  

    RETURN @InputString  
  
  END


Теперь, если m использует эту функцию, как
select dbo.RemoveSpaces('3-2-205,  Raja Mudliar Street,  kalasiguda,  Secunderabad') 


тогда его работа прекрасна, но когда m использует такую функцию, как

select dbo.RemoveSpaces(afa.address) as addr  from table1

тогда это не работает...

Не могли бы вы сказать мне, в чем проблема?

Примечание: Избегайте Плохого Английского Языка
Спасибо
Четан В

Guirec

Что такое sql-тип afa.address ?

[no name]

его варчар

2 Ответов

Рейтинг:
2

Member 13091969

МЕТОД 1 - ЦИКЛ WHILE И ЗАМЕНА

Используя цикл WHILE, мы можем проверить вхождения двойных пространств, как условие цикла.
До тех пор, пока вхождение (цикл) не завершится неудачей, нам нужно изменить каждое двойное пространство как одиночное пространство.

DECLARE @TestString VARCHAR(200);  
SET @TestString='   Ex      ample   St  ring   '; 
 
WHILE CHARINDEX('  ',@TestString) <> 0
 SET @TestString = REPLACE(@TestString,'  ',' ');
 
SELECT @TestString AS RESULT;


Если мы также хотим удалить пробелы в начале и конце строки, то используйте функции LTRIM и RTRIM.
Если наша версия SQL Server выше, то мы также можем использовать функцию TRIM вместо LTRIM и RTRIM.

DECLARE @TestString VARCHAR(200);  
SET @TestString='   Ex      ample   St  ring   '; 
 
WHILE CHARINDEX('  ',@TestString) <> 0
 SET @TestString = REPLACE(@TestString,'  ',' ');
 
SELECT LTRIM(RTRIM(@TestString)) AS RESULT;


СПОСОБ 2 - НЕИСПОЛЬЗУЕМЫЕ СИМВОЛЫ В ЗАМЕНЕ

DECLARE @TestString VARCHAR(200);  
SET @TestString='   Ex      ample   St  ring   '; 
 
SELECT @TestString =
REPLACE(
    REPLACE(
        REPLACE(@TestString, ' ', ' ^')
    ,'^ ', '')
, '^', '');
 
SELECT LTRIM(RTRIM(@TestString)) AS RESULT;


Мы также можем использовать любой другой символ вместо"^’.
Главное, это не должен быть один из символов, который уже присутствует во входной строке.

МЕТОД 3 - ASCII НЕПЕЧАТАЕМЫЕ СИМВОЛЫ В ЗАМЕНЕ

Если мы не уверены в том, какие неиспользуемые символы использовать, то предлагаем использовать непечатаемые символы ASCII вместо неиспользуемых символов, как показано ниже.

DECLARE @TestString VARCHAR(200);  
SET @TestString='   Ex      ample   St  ring   '; 
 
SELECT @TestString = 
REPLACE(
    REPLACE(
            REPLACE(@TestString,' ',CHAR(17)+CHAR(18))
    ,CHAR(18)+CHAR(17),'')
,CHAR(17)+CHAR(18),' ');
 
SELECT LTRIM(RTRIM(@TestString)) AS RESULT;


ЗАКЛЮЧЕНИЕ

Мы можем использовать вышеприведенные методы для удаления дубликатов, а также нескольких пробелов в одно пространство. Если мы рассмотрим производительность, то метод 3 будет лучше, чем два других метода.


Рейтинг:
0

vinodkumarnie

чтобы удалить несколько пробелов ...

DECLARE @s VARCHAR(MAX) = '221B    BAKER       STREET';
   SELECT REPLACE(
           REPLACE(
              REPLACE(
                   LTRIM(RTRIM(@s))
               ,'  ',' '+CHAR(7))
           ,CHAR(7)+' ','')
       ,CHAR(7),'') AS CleanString ;

см. ссылку ниже...

http://davidbrycehoward.com/archive/2011/05/more-recursionremoving-multiple-spaces/[^]

чтобы удалить символ новой строки..
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')


Улучшенная функция TRIM () – удаление конечных пробелов, начальных пробелов, пробелов, табуляций, возврата каретки, перевода строк см. ниже...

http://blog.sqlauthority.com/2008/10/10/sql-server-2008-enhenced-trim-function-remove-trailing-spaces-leading-spaces-white-space-tabs-carriage-returns-line-feeds/[^]

надеюсь, это вам поможет...