ورود

View Full Version : سوال در مورد نحوه جستجو در داخل یک رکورد



سیروس مقصودی
چهارشنبه 22 شهریور 1391, 13:16 عصر
با سلام

من جدولی دارم که در آن جدول در یک فیلد (مثلا فیلد A) کد یک شهرستان و در فیلد(B) کد چند شهرستان را نگهداری میکنم من میخواهم با دستور Select بک Query بنویسم که کد شهرستان را از فیلد A برداشته و در فیلد B جستجو کند و اگر کد شهرستان مورد نظر را در فیلد B پیدا کرد کلمه Found در غیر اینصورت کلمه Not Found را در هر رکورد برای من نمابش دهد .
لازم به توضیح است که من از Sql Server 2000 استفاده میکنم .
من در این مورد قبلا در سایت جستجو کردم ولی موردی پیدا نکردم

با تشکر فراوان ...

pashna
پنج شنبه 23 شهریور 1391, 03:51 صبح
سلام، من ۱ جدول ساختم و مقادیر داخل شو ‌ست کردم به شکل زیر :
92803
و کؤری که نوشتم به این شکل هست :



DECLARE @Result TABLE ( Code INT )
DECLARE @Code INT
DECLARE @Cur CURSOR
SET
@Cur = CURSOR FOR
SELECT A FROM dbo.Table_1
OPEN @Cur
FETCH NEXT
FROM @Cur INTO @Code
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS ( SELECT *
FROM dbo.Table_1
WHERE B = @Code )
BEGIN
INSERT INTO @Result
( Code
)
SELECT @Code
FROM dbo.Table_1
WHERE B = @Code
END
FETCH NEXT
FROM @Cur INTO @Code
END
CLOSE @Cur
DEALLOCATE @Cur

SELECT DISTINCT
T.A ,
CASE WHEN Code IS NULL THEN 'Not Found'
ELSE 'Found'
END
FROM @Result AS R
RIGHT JOIN dbo.Table_1 AS T ON R.Code = T.A

pashna
پنج شنبه 23 شهریور 1391, 04:27 صبح
اینم ۱ راه دیگه


DECLARE @tmp1 TABLE ( A INT );
DECLARE @tmp2 TABLE ( B INT );
INSERT INTO @tmp1
( A )
SELECT A
FROM TEST.dbo.Table_1
INSERT INTO @tmp2
( B )
SELECT B
FROM TEST.dbo.Table_1




SELECT DISTINCT
[@tmp1].A ,
CASE WHEN [@tmp1].A = [@tmp2].B THEN 'Found'
ELSE 'NotFound'
END
FROM @tmp1
LEFT OUTER JOIN @tmp2 ON [@tmp1].A = [@tmp2].B

سیروس مقصودی
پنج شنبه 23 شهریور 1391, 07:53 صبح
با تشکر از دوستان
جدولی که من دارم بدینصورت میباشد

در این جدول من میخواهم از فیلدA کد شهرستان را خوانده و در فیلد B جستجو کند

با تشکر ...

pashna
پنج شنبه 23 شهریور 1391, 10:01 صبح
DECLARE @Result TABLE ( Code INT )
DECLARE @Code INT
DECLARE @Cur CURSOR
SET
@Cur = CURSOR FOR
SELECT A FROM dbo.Table_1
OPEN @Cur
FETCH NEXT
FROM @Cur INTO @Code
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS ( SELECT *
FROM dbo.Table_1
WHERE B LIKE CONCAT('%',@Code, '%') )
BEGIN
INSERT INTO @Result
( Code
)
SELECT @Code
FROM dbo.Table_1
WHERE B LIKE CONCAT('%',@Code, '%')
END
FETCH NEXT
FROM @Cur INTO @Code
END
CLOSE @Cur
DEALLOCATE @Cur

SELECT DISTINCT
T.A ,
CASE WHEN Code IS NULL THEN 'Not Found'
ELSE 'Found'
END
FROM @Result AS R
RIGHT JOIN dbo.Table_1 AS T ON R.Code = T.A

سیروس مقصودی
پنج شنبه 23 شهریور 1391, 10:55 صبح
با تشکر از همه دوستان

من میخواهم فقط با دستور Select این کار را انجام دهم . یعنی در داخل Select از چه توابعی ( توابع خود Sql ) استفاده نمایم که اینکار را انجام دهد .

hamidkh
پنج شنبه 23 شهریور 1391, 12:40 عصر
سلام


charindex(A, B)

هر دو فیلدتون باید همنوع باشن. اگه نتیجه بزرگتراز صفر شد یعنی وجود داره

ma1246
جمعه 24 شهریور 1391, 01:09 صبح
با این دستور میتونی راحت تر جستجو کنی :
,Select A,B
'Case When charindex( NewA ,NewB) > 0 Then 'Found
Else 'Not Found' End As Search
From
Select A,B,',' + cast(A AS varchar) + ',' As NewA ,',' + replace(B,' ','') + ',' As NewB From _A) As V1)