ورود

View Full Version : Compress String



FirstLine
دوشنبه 02 آذر 1383, 06:42 صبح
با سلام
یک بانک SQL دارم که اطلاعات داخل آن دارای Space های زیادی است من چجوری میتونم با QA همه فاصله های 2 تایی را به یک فاصله تبدیل کنم؟
با تشکر

hr110
دوشنبه 02 آذر 1383, 09:14 صبح
جای این سوال تا بخش SQLServer است، و اما جواب:

update TABLENAME set FLD1=Replace(FLD1,' ',' ')

FirstLine
چهارشنبه 04 آذر 1383, 11:10 صبح
با سلام
متاسفانه روی فیلد nText کار نمیکند :گیج:
با تشکر

MiRHaDi
چهارشنبه 04 آذر 1383, 22:38 عصر
سلام
یک برنامه با Delphi بنویس ! یک بار از اول بانک تا آخر رو بخونه و درست کنه بذاره سر جاش !
یک بار هست دیگه ! کاربر هم کاری نداره خودت الآن درستش کن
بای

AminSobati
پنج شنبه 05 آذر 1383, 20:53 عصر
من هم با نوشتن یک برنامه موافقم، اما اگر اصرار داشته باشین این کار توسط TSQL انجام بشه، از TEXTPTR برای ویرایش text و ntext استفاده کنین:
http://www.barnamenevis.org/forum/viewtopic.php?t=15914&highlight=textptr

hr110
جمعه 06 آذر 1383, 11:05 صبح
البته با انجام cast نیز میتوان این کار را انجام داد، به شرطی که اطلاعات شما کمتر از 4 کیلو بایت باشد(؟) :wise1:

AminSobati
جمعه 06 آذر 1383, 15:20 عصر
بعید میدونم کسی که حجم اطلاعاتش کمتر 4 کیلو بایت باشه سراغ ntext بره :wink:

hr110
جمعه 06 آذر 1383, 16:52 عصر
یکیش خود من، :wink:
البته نیازی به توضیح نداره،(برای اطلاع دیگران) کسانی که بخواهند حجم اطلاعاتی بین 300 کاراکتر و بیشتر را در یک فیلد ذخیره کنند میتوانند از text استفاده کنند، سابقه تحصیلی

AminSobati
جمعه 06 آذر 1383, 17:00 عصر
خوب! دلیلش چیه که برای اطلاعات کم حجم از text استفاده کردین! مثلا varchar تا 8000 کاراکتر و nvarchar تا 4000 کاراکتر ظرفیت داره..

hr110
شنبه 07 آذر 1383, 07:03 صبح
سرعت و حجم؛ استفاده از char با اندازه مثلاً 4k حجم بانک را به شدت بالا برده و varchar نیز سرعت را کاهش خواهد داد. لطفاً ننویسید که هیچ تفاوتی نمیکند چرا که این مورد را به تجربه دیده‌ام.

AminSobati
شنبه 07 آذر 1383, 16:26 عصر
دوست عزیزم،
استفاده از char به دلیل اینکه fixed lengh هست طبیعتا فضای بیشتری از اونچه که نیاز داره مصرف میکنه و جز در موارد خاص، ازش استفاده نمیشه. اما استفاده از text به جای varchar سودی در Performance نخواهد داشت(به جز یک استثنا) به این دلیل:
اطلاعات varchar در کنار سایر فیلدها ذخیره میشه ولی اطلاعات text یا ntext یا image (که از حالا به بعد blob مینامیم) در فضایی دورتر از فیلدهای جدول. بنابراین زمانی که Query شما به Table Scan نیاز پیدا کنه، اطلاعات varchar رو در کنار سایر فیلدها میبینه و سریعا نتیجه Query آماده میشه. ولی اطلاعات blob در جای دیگری از Data File قرار گرفته و برای بدست آوردنش باید بین محل اصلی جدول و محل Blob مرتبا Jump کنه که این یعنی افت Performance. به همین دلیل مایکروسافت یک Option قرار داده (sp_tableoption) تا بتونیم blob های کمتر از 7 کیلو بایت رو به صورت Inline در کنار خود جدول نگهداری کنیم تا در صورت نیاز به Table Scan، اطلاعات blob در دسترس یا نزدیکتر باشند.
تنها استثنا که عرض کرده بودم (در مزیت ntext به varchar از نظر Performance) این هست که Query شما فقط فیلد blob رو select کرده باشه که در این حالت، SQL Server فقط کافیه یکبار به محل blob بره و همه اطلاعات رو بخونه و برگرده. ولی اگر فیلد دیگه ای غیر از blob رو هم select کرده باشید، باز باید Jumpهای متعدد داشته باشه که یقینا سرعت افت داره.
یک حالت نادر دیگر هم هست که ntext به varchar مزیت داره ولی چون خیلی خاص هستش از گفتنش صرف نظر میکنم...

hr110
شنبه 07 آذر 1383, 19:05 عصر
از توضیح مفصل شما متشکرم :)

AminSobati
شنبه 07 آذر 1383, 19:43 عصر
موفق باشین :)