PDA

View Full Version : سوال: دستور Contains در SQL Server



mehran6764
شنبه 16 مهر 1401, 01:24 صبح
سلام ، وقت همگی بخیر



string s1 = "13-17-16-15";



می دونیم با سی شارپ اگر s1.Contains(7)) رو چک کنیم جواب برابر false خواهد بود
اما اگر خود s1.Contains(17)) ، مقدار true برمی گرده ..
اما متاسفانه دستور Contains تو SQL server ایجوریه که اگه تو همون عبارت s1 بخواییم چک کنیم
عدد 7 برمی گرده ، چون این عدد 7 داخل 17 هست ، 17 هم برمی گردونه
می دونم شاید نتونستم شفاف توضیح بدم
ولی سوالم اینکه تو چطور SQL server بین رشته هایی که همچین فرمتی دارن
3-15-17
کوئری بزنم که اگه دنبال 5 هستم ، دیگه رکوردهایی که 15 دارن برام نیاد

یا اگر بخوام ساده تر بگم : معادل دستور Contains در سی شارپ رو نیاز دارم که عملکردش هم مث همین متد باشه

mazoolagh
شنبه 16 مهر 1401, 17:38 عصر
می دونیم با سی شارپ اگر s1.Contains(7)) رو چک کنیم جواب برابر false خواهد بود
1- نتیجه بطور منطقی باید true باشه، هم برای 7 و هم 17 ، چون شما در یک string چک میکنین.
اگر s1 لیست باشه گفته شما درست درمیاد.

2- در بخش TSQL مطرح کنین بهتره.

mehran6764
یک شنبه 17 مهر 1401, 09:26 صبح
1- نتیجه بطور منطقی باید true باشه، هم برای 7 و هم 17 ، چون شما در یک string چک میکنین.
اگر s1 لیست باشه گفته شما درست درمیاد.

2- در بخش TSQL مطرح کنین بهتره.

ممنون از پاسخ و توجه شما

اما بررسی همین رشته با متد مشابه تو سی شارپ false برمی گردونه آ ، یعنی سی شارپ غیرمنطقیه ؟:متفکر:
تالار دات نت باز نسبت به بقیه بخش ها چند نفری هستن ، برا همین اینجا پرسیدم

mazoolagh
یک شنبه 17 مهر 1401, 11:52 صبح
حتما یک جای کار اشتباه میکنین:

using System;
public class Program
{
public static void Main()
{
string s1 = "13-17-16-15";
Boolean b7 = s1.Contains("7"); // true
Boolean b17 = s1.Contains("17"); // true
Console.WriteLine(b7.ToString());
Console.WriteLine(b17.ToString());
}
}

https://dotnetfiddle.net/2CWEb8



using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
List<string> s1 = new List<string>();
s1.Add("13");
s1.Add("17");
s1.Add("16");
s1.Add("15");
Boolean b7 = s1.Contains("7"); // false
Boolean b17 = s1.Contains("17"); // true
Console.WriteLine(b7.ToString());
Console.WriteLine(b17.ToString());
}
}
https://dotnetfiddle.net/egYUzw

mazoolagh
یک شنبه 17 مهر 1401, 11:58 صبح
در sql باید همه حالتهای ممکن رو چک کنین: دقیق برابر، اول، وسط، آخر.

select * from table_name
where (s1 like '17')
or
(s1 like '17-%')
or
(s1 like '%-17-%')
or
(s1 like '%-17')

mehran6764
یک شنبه 17 مهر 1401, 14:06 عصر
در sql باید همه حالتهای ممکن رو چک کنین: دقیق برابر، اول، وسط، آخر.

select * from table_name
where (s1 like '17')
or
(s1 like '17-%')
or
(s1 like '%-17-%')
or
(s1 like '%-17')

در مورد سی شارپ حق با شما بود ، من اشتباه دیده بودم . ممنون تصحیح کردین
خدا خیرتون بده کد دوم هم درسته

--

پی نوشت : ایجور که خوندم ظاهرا با STRING_SPLIT می شد کارایی انجام داد ولی با کد شما مشکلم حل شد.ممنونم