PDA

View Full Version : جستجوی الگوی خاص در دستور Like



Iran58
یک شنبه 12 شهریور 1396, 08:18 صبح
سلام
فرض کنید متغیرهای زیر را تعریف کرده ایم

declare @test1 varchar(100)='abcd'

declare @test2 varchar(100)='abcdweabcd'

declare @test3 varchar(100)='abcdabcd'

declare @test4 varchar(100)='abcddabcdabcd'

declare @test5 varchar(100)='abcdabcdabcdabcdabcdabcdabcdabcd'

declare @test6 varchar(100)='abcd1'

declare @test7 varchar(100)='abcdabcdabcdabcdab'

declare @test8 varchar(100)='aabcd'

declare @test9 varchar(100)='abcddabcdabcd2'

declare @test10 varchar(100)='acbd'

declare @test11 varchar(100)='dcba'

declare @test12 varchar(100)='adbcd'

حال می خواهم دستور like را طوری بنویسم
که الگوی abcd حتما راعایت شده باشد
یعنی ترتیب آنها همان abcd باشد و حال چه 1 بار یا 100بار تعریف شده باشد
باتوجه به متغریهای بالا
یعنی
@test1,@test3,@test4,@test5
صحیح باشند و مابقی ناصحیح

Iran58
سه شنبه 16 مرداد 1397, 09:44 صبح
سلام
از دوستان کسی نیست راهنمای کند
باتشکر

msalim
شنبه 20 مرداد 1397, 23:34 عصر
حتما با LIKE ؟
یه راه حل دیگه:
یه تابع هست به نام replace میتونید رشته موردنظر رو به عنوان پارامتر اول بدید. رشته abcd رو پارامتر دو. رشته تهی رو پارامتر سوم.
ظاهرا تابع میاد از ابتدا رشته شروع میکنه هرچی زیر رشته به شکل abcd هست رو با تهی جایگزین میکنه و در نهایت رشته تغییریافته رو برمیگردونه

بعد خروجی تابع رو پارامترتابع datalength قرار میدی که طول رشته ورودی رو برمیگردونه
در نهایت اگه طول رشته مساوی با صفر بود یعنی اون رشته ی مورد نظر است.



DECLARE @pattern VARCHAR(MAX)= 'abcd'


DECLARE @string1 VARCHAR(MAX)= 'abcdabcdabcd'
DECLARE @string2 VARCHAR(MAX)= 'abcdabcdabcda'




SELECT DATALENGTH(REPLACE(@string2, @pattern, ''))