# پایگاه‌های داده > SQL Server > T-SQL >  نحوه حذف کردن فضاهای خالی اضافی در یک فیلد

## zimzim

سلام دوستان
من چه جوری می تونم این کاررو با استفاده از توابع Sql Server انجام بدم ؟
فرض کنید که یک فیلدی دارم که آدرس محل سکونت را نگهداری می کند . که مثلا ببرای جداکردن نام خیابان نام کوچه و...... از Space استفاده می شود . حالا فرض کنیم که به جای یک Space چندین Space وارد کردیم .حالا چگونه   می توانم با استفاده از توابع این چند فاصله خالی را به یک فاصله خالی تبدیل کنم ؟ 

ممنون میشم اگه راهنماییم کنید

----------


## ASKaffash

سلام
با دستور Replace خود SQLServer جواب خوبی بدست نمی دهد بهتر است یک UDF پیاده سازی کنید و درون یک حلقه تکرار تا انتهای رشته ورودی اگر کاراکتر قبلی Space باشد آن را در رشته جدید بازگشتی حذف کنید

----------


## Reza_Yarahmadi

در صورتي كه براي يك رشته ميخوايد ، ميتونيد بصورت زير عمل كيد
Declare @Str varchar(Max)
Set @Str ='Reza           Yarahmadi'
WHILE(CharIndex('  ', @Str)<> 0)
    Set @Str = Replace(@Str, '  ', ' ')
Select @Strبراي اطلاعات يك جدول هم ميتونيد از روش زير كمك بگيريد(اين روش از 2005 به بالا جواب ميده). در كل روش استانداردي براي اين كار (فكرميكنم!) وجود نداره و بايد با بازي كردن با دستورات اين كار رو انجام بديد.
Declare @Str1 varchar(Max),@Str2 varchar(Max),@Str3 varchar(Max)
Set @Str1 ='Reza           Yarahmadi'
Set @Str2 ='Reza           Yarahmadi'
Set @Str3 ='Reza           Yarahmadi'
;With TempTable as(
    Select @Str1 as Name
    UNION ALL
    Select @Str2 as Name
    UNION ALL
    Select @Str3 as Name
), TempTable2 as(
    Select 
        Row_Number() Over(Order by Name) as Id,
        Name
    From 
        TempTable
), res(Id,RowN,Name) as(
    Select 
        Id, 
        Row_Number() Over(Order by Id) as RowN, 
        Name 
    From 
        TempTable2
    UNION All
    Select 
        Id, 
        (RowN + 1)  as RowN, 
        Replace(Name, '  ', ' ') as Name 
    From 
        res 
    Where 
        CharIndex('  ', Name) <> 0
),Result as(
    Select 
        Id, 
        Max(RowN) as RowN 
    From 
        res 
    Group By 
        Id
)
Select 
    r.Name 
From    
    res r Inner Join Result re 
    ON 
        r.Id = re.Id
        AND    
        r.RowN = re.RowN

----------

