PDA

View Full Version : نکاتی در مورد روشهای تغییر رشته های بزرگ



حمیدرضاصادقیان
چهارشنبه 24 خرداد 1391, 10:06 صبح
سلام دوستان.
این تاپیک دوم در مورد نکات ریز در زبان شیرین T-SQL هست که امیدوارم مفید واقع بشه.

در این تاپیک قصدم این هست نکاتی در مورد تغییر محتویات فیلدها با نوع های Varchar(MAX)و Nvarchar(MAX),varbunary(MAX) رو خدمتتون بیان کنم.

ابتدا یک سوال مطرح میکنم بعد از پاسخ دوستان ، در صورت ارائه نشدن پاسخ مناسب راهکارو ارائه خواهم کرد.

ابتدا Script زیر رو اجرا کنید.

IF OBJECT_ID('Dbo.TestStr') IS NOT NULL
DROP TABLE Dbo.TestStr;
CREATE TABLE TestStr
(Id INT,
String VARCHAR(MAX));
INSERT INTO TestStr
VALUES(1,'String 1999 Data Text');


حالا ما میخواهیم با استفاده از دستورUpdate نتایج زیر در جدول ما اعمال بشه.

درواقع بعداز هر دستور Update با Select ازجدول تک تک نتایج زیر رو داشته باشیم.

'String nineteen ninety-nine Data Text'
'String 1999'
'String 1999 Nineteen ninety-Nine'
'String 1999 data Text End samle string'
'String data Text end Sample String'


منتظر جواب دوستان هستم.

حمیدرضاصادقیان
جمعه 26 خرداد 1391, 10:51 صبح
سلام.
خوب برای اینکه بتونیم اینکارو انجام بدیم باید از دستور Write استفاده کنیم.
دستور Write دارای سه قسمت می باشد.
Expression@ = عبارت مورد نظر برای جایگزینی در رشته مورد نظر می باشد.
Offset@ = موقعیت شروع مقدار در عبارت می باشد.
Length@ = طول عبارت اصلی در رشته از Offset می باشد.

نکته :
Offset به صورت Zero Based می باشد یعنی اینکه اولین مقدار آن از صفر شروع می شود نه از یک.

خوب تاحالا توضیح در مورد این دستور به اتمام رسید.
حالا بریم سر مثالها و اینکه چطوری اونها رو پیاده سازی کنیم.
برای نمایش مقدار اول باید به این شکل از دستور استفاده کرد.

update TestStr
Set String.Write('nineteen ninety-nine',7,4)


برای نمایش نتیجه بعدی اگر شما مقدار Expression رو تعیین نکنید و مقدار length رو نیز وارد نکنید و فقط مقدار Offset باشه ، رشته مورد نظر رو از Offset مورد نظر به بعد حدف خواهد کرد.

update TestStr
Set String.Write(null,12,0)


اگر مقدار Length برابر null باشد رشته مورد نظر در offset تعیین شده Truncate شده و عبارت Expression در انتهای رشته اضافه خواهد شد.

update TestStr
Set String.Write('Nineteen ninety-Nine',12,Null)

اگر Offset برابر null باشد و مقدار Length برابر 0 باشد عبارت Expression در انتهای رشته مورد نظر اضافه می شود.

update TestStr
Set String.Write(' End sample String',Null,0)


اگر عبارت Expression یک رشته خالی باشد ، هیچ داده ای اضافه نخواهد شد به جای آن میتوان رشته مورد نظر رو از Offset به طول Length از رشته اصلی حذف کرد


update TestStr
Set String.Write('',7,4)


امیدوارم مطالب فوق مفید واقع بشه.

khorsandreza
دوشنبه 12 آبان 1393, 13:37 عصر
سلام
من دنبال موضوعی بودم هرچند قدیمی است ولی نزدیک به نیاز من هست
من یک رشته دارم که که داخل ان رشته یک کاراکتر خاصی هست مثل شکل زیر حالا می خواهم موقعیت ان کاراکتر را پیدا کنم و از ان به بعد را حذف کنم

شهرري-خ قم-خ شهيد حميد کاشاني-پ12</title> بقیه متنی هست که می خواهم حذف شود


متنی که رنگ قرمز هست در تمام رکوردها تکرار شده حالا می حواهم از ان متن به بعد که همان متنی ابی فرضی هست حذف شود

pezhvakco
سه شنبه 13 آبان 1393, 18:39 عصر
اون کدی را که داخل کادر نوشته اید را نفهمدیم، ولی

برای پیدا کردن یک نوشته درون نوشته دیگر CHARINDEX را کمک میگیرن =>

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
برای ویرایش بخشی از نوشته =>



REPLACE ( string_expression , string_pattern , string_replacement )
STUFF ( character_expression , start , length , replaceWith_expression )

و
http://msdn.microsoft.com/en-us/library/ms188043.aspx
رو بکار میگرین