PDA

View Full Version : نحوه حذف کردن فضاهای خالی اضافی در یک فیلد



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

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

ASKaffash
دوشنبه 25 بهمن 1389, 08:12 صبح
سلام
با دستور Replace خود SQLServer جواب خوبی بدست نمی دهد بهتر است یک UDF پیاده سازی کنید و درون یک حلقه تکرار تا انتهای رشته ورودی اگر کاراکتر قبلی Space باشد آن را در رشته جدید بازگشتی حذف کنید

Reza_Yarahmadi
دوشنبه 25 بهمن 1389, 09:06 صبح
در صورتي كه براي يك رشته ميخوايد ، ميتونيد بصورت زير عمل كيد

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

hosseint1360
یک شنبه 02 بهمن 1401, 14:34 عصر
با تابع REPLACE
Update tabalname set filde=REPLACE(filde,' ','')