PDA

View Full Version : راهمایی درباره تعریف pattern و ...



sayeh24
شنبه 12 مرداد 1392, 15:36 عصر
دوستان میشه راهنمایی کنین چطوری میتونم دستوراتم و بنویسم که sql یه الگوی ثابت رو از بین یه رشته تشخیص بده و هرچی بین اونها هست و نمایش بده:
\مثلا:
dafhklcjkh<id=11>35634556<id=12>fhjfgjh86<id=13>88888hh<id=14>gffgb3234

برای این مثال بالا الگو به شکل <> مدنظره

3تا پارامتر ورودی دارم: خود رشته و شروع و پایان الگو

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

محمد سلیم آبادی
شنبه 12 مرداد 1392, 16:28 عصر
من متوجه نمیشم خروجیتون چیه دقیقا. میتونی بگی با وجود آن رشته چه خروجی مد نظر هست؟


3تا پارامتر ورودی دارم: خود رشته و شروع و پایان الگو
نمی تونید با تابع substring این کار انجام بدین؟ پارامتر اول خود رشته، پارامتر دوم شروع الگو، پارامتر سوم اختلاف شروع و پایان الگو.

محمد سلیم آبادی
شنبه 12 مرداد 1392, 19:32 عصر
این کد را اجرا کنید:

declare @v varchar(max)='dafhklcjkh<id=11>35634556<id=12>fhjf gjh86',@r varchar(max)=''

while charindex('<',@v)>0
begin
set @r+=substring(@v,charindex('<',@v),charindex('>',@v)-charindex('<',@v)+1)
set @v=stuff(@v,1,charindex('>',@v),'')
end

select @r

sayeh24
شنبه 12 مرداد 1392, 21:13 عصر
ممنونم عالی بود
فقط یه سوال درباره کد جلوی دستور while منظور چیه؟لازمه بزرگتر از صفر؟

محمد سلیم آبادی
شنبه 12 مرداد 1392, 21:23 عصر
declare @v nvarchar(max)=N'dafhklcjkh▄<id=11>35634556▄<id=12>fhjf gjh86',@r varchar(max)=''

while charindex('<',@v)>0
set @v=replace(@v,substring(@v,charindex('<',@v),charindex('>',@v)-charindex('<',@v)+1),'')

select @v

محمد سلیم آبادی
شنبه 12 مرداد 1392, 21:28 عصر
ممنونم عالی بود
فقط یه سوال درباره کد جلوی دستور while منظور چیه؟لازمه بزرگتر از صفر؟
جملتون رو ویرایش کردین. بالاخره جواب دقیقا برعکس بود خودش بود؟ به هر حال من برای هر دو حالت راه حل ارائه دادم.
راجب سوالتون باید بگم بله باید بزرگتر از صفر باشه به این معنا که الگو هنوز در رشته یافت میشه...

sayeh24
شنبه 12 مرداد 1392, 21:41 عصر
بله ویرایش کردم آخه خودم برعکسش و درآوردم !
ممنونم خیلی خوب بود

محمد سلیم آبادی
یک شنبه 13 مرداد 1392, 09:25 صبح
به جای روش پست 5 میتونین از این نیز استفاده کنید:

declare @v nvarchar(max)=N'dafhklcjkh▄<id=11>35634556▄<id=12>fhjf gjh86',@r varchar(max)='', @e nvarchar(max)
set @e=@v

while charindex('<',@e)>0
set @e=stuff(@e,charindex('<',@e),charindex('>',@e)-charindex('<',@e)+1,'')

select @e