ورود

View Full Version : XOR در TSQL



Mohammad_Mnt
چهارشنبه 10 مرداد 1386, 12:56 عصر
من نتونستم عملگر XOR منطقی ( Boolean ) را توی MSSQL 2005 پیدا کنم. چه راهی برای شبیه سازی این عملگر وجو داره ؟

در ضمن، چون کوئری که دارم خیلی طولانیه، نمی شه از چیزی مثل

(Column1 = 1 AND Column2 <> 1)
OR (Column1 <> 1 AND Column2 = 1) استفاده کنم.

اون بخشی از کوئری که به XOR احتیاج داره :


(( ( @lOnlyBottom = 1 ) or (tCoding.type between @lTypeFrom and @lTypeTo)) XOR
( ( @lOnlyBottom = 1 ) and
(tDocumentItem.coding in
( SELECT distinct cd1.code FROM tCoding cd1 inner join tcoding cd2
on (cd1.code not in ( select Level1 from tcoding )) and
(cd1.code not in ( select Level2 from tcoding )) ) )
))

پ.ن : جالب اینجاست که کد زیر هم کامپایل نمی شه :

Convert ( (1=1) as bit )

AminSobati
پنج شنبه 11 مرداد 1386, 20:03 عصر
برای XOR علامت ^ رو استفاده کنین

Mohammad_Mnt
پنج شنبه 11 مرداد 1386, 20:28 عصر
امین جان، XOR منطقی نه XOR بیتی !

AminSobati
پنج شنبه 11 مرداد 1386, 21:23 عصر
یعنی منطقش جواب کار شما رو نمیده؟ اگر جستجو رو بر اساس XOR این دو فیلد انجام بدین توسط ^ چی میده؟

mehdi.mousavi
پنج شنبه 11 مرداد 1386, 22:58 عصر
امین جان، XOR منطقی نه XOR بیتی !


سلام.
ما تو SQL، چیزی به اسم Logical XOR نداریم. (چون تایپ BIT داریم نه Boolean). برای اینکار همون روشی که خودتون پیشنهاد کردین بهترین کاره. منظورم:


(Column1 = 1 AND Column2 <> 1) OR (Column1 <> 1 AND Column2 = 1)

هستش. برای کوچک کردن Query ها هم از view یا Stored Procedure ها استفاده کنید.

Mohammad_Mnt
جمعه 12 مرداد 1386, 12:29 عصر
یعنی منطقش جواب کار شما رو نمیده؟ اگر جستجو رو بر اساس XOR این دو فیلد انجام بدین توسط ^ چی میده؟
خطا می ده ! چون همون طور که آقا مهدی گفت تایپ بولین نداریم توی اس.کیو.ال