এসকিউএল নির্বাচন বিবৃতিতে বুলিয়ান মান প্রদান করুন Return


144

এসকিউএল সিলেক্ট স্টেটমেন্টে বুলিয়ান মানটি কীভাবে ফিরে আসবে?

আমি এই কোডটি চেষ্টা করেছি:

SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)

এটি কেবল টেবিলে উপস্থিত TRUEথাকলেই ফিরে আসে UserID। আমি এটা ফিরে যেতে চাই FALSEযদি UserIDটেবিলের উপর কোন অস্তিত্ব নেই।


3
কোন ডিবিএম? বর্গক্ষেত্রের বিবরণ পৃথক।
জোশপ

এসকিউএল সার্ভার কোনও বুলিয়ান টাইপ যেমন সমর্থন করে না SELECT WHEN CAST(1 AS BIT) THEN 'YES' END AS result- যেমন কোনও ত্রুটির ফলস্বরূপ CAST(1 AS BIT)একই লজিকাল সত্য নয়।
onedaywhen

উত্তর:


253

আপনার কাছে যা আছে তা ব্যবহারকারীর অস্তিত্ব না থাকলে কোনও সারিই ফিরে আসবে না। আপনার যা প্রয়োজন তা এখানে:

SELECT CASE WHEN EXISTS (
    SELECT *
    FROM [User]
    WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END

2
তারকাচিহ্ন কেন ব্যবহার করুন, আপনি যদি এর 1পরিবর্তে ব্যবহার করেন তবে ভাল *

7
@ রবার্টপেটার07 - দু'টি সমতুল্য, তবে *আরও মূর্খবাদী। এই প্রশ্নটি দেখুন ।
চাদ

যদি WHILE লুপটিতে ব্যবহার করা হয় তবে আমাকে 'WHILE' এর ঠিক পরে bra bra ধনুর্বন্ধনী মধ্যে এটি আবদ্ধ করতে হবে?
পূর্ণ_প্রজ_ফুল

আপনি কি ফিরে আসা মানটিতে একটি কলামের নাম যুক্ত করতে পারেন?
xMetalDetectorx

3
@ xMetalDetectorx এটি আমার পক্ষে কলামের নাম যুক্ত করার জন্য কাজ করেছে ( AS boolঅংশটি খুব গুরুত্বপূর্ণ):CAST( CASE WHEN EXISTS ( SELECT * FROM mytable WHERE mytable.id = 1) THEN TRUE ELSE FALSE END AS bool) AS nameofmycolumn
লুসিও মোল্লিন্ডো

31

সম্ভবত এই রেখা বরাবর কিছু:

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;

http://sqlfiddle.com/#!3/5e555/1


6
এটি একটি স্ট্রিং
ওএমজি পোনিজ

কলামের নাম অন্তর্ভুক্ত করা ভাল অনুশীলন - ক্যাসেট নির্বাচন করুন (কেস WHEN COUNT (*)> 0 টি 1 টি এলএসই 0 বিট হিসাবে বিছানা) মাইক্রোমনেম থেকে আইডি = 1
ডিয়েগো আলভেস

22

সাধারণভাবে 1 = trueএবং দেওয়া 0 = false, আপনাকে যা করতে হবে তা হ'ল সারিগুলির সংখ্যা গণনা করা এবং একটিতে কাস্ট করা boolean

সুতরাং, আপনার পোস্ট কোডটি কেবল একটি COUNT()ফাংশন যুক্ত করা দরকার:

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)

8
এরকম Exists(পরীক্ষা অনেকটা করছেন চেয়ে দ্রুত Count(1)সারি বৃহৎ সংখ্যক টেবিলের উপর পরীক্ষা।
স্কট চেম্বারলাইন

5
সম্ভবত। আমি আমার উত্তরে পারফরম্যান্সের জন্য কোনও দাবি করি নি, ওপি যা চেয়েছিল তা অর্জনের জন্য কেবলমাত্র সর্বনিম্ন কোড পরিবর্তন করে। তবে কলামটি UserIDযদি সূচিকৃত হয় (বা এটি পিকেও হয়) অবশ্যই আপনি সরাসরি এক অনন্য সারিতে যাচ্ছেন যা উপস্থিত (বা না)।
স্টিয়ার্ট

9

'অস্তিত্ব' ব্যবহার করুন যা 0 বা 1 প্রদান করে।

ক্যোয়ারীটি এমন হবে:

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)

10
ত্রুটি: "'EXISTS' শব্দটির নিকটে ভুল সিনট্যাক্স।" sqlfiddle.com/#!18/ef905/18
জোপিসি

8
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

গণনা করা হলে (*) = 0 টি মিথ্যা দেয়। গণনা করা হলে (*)> 0টি সত্য দেয়।


4

আমি এটি এইভাবে করি:

SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022

বুলিয়ান হিসাবে দেখা কখনই শূন্য হতে পারে না (কমপক্ষে। নেট এ), এটি ডিফল্ট হওয়া উচিত মিথ্যা বা এটি নিজেই সেট করতে পারেন যদি এটি ডিফল্ট সত্য হয়। তবে 1 = সত্য, সুতরাং নাল = মিথ্যা এবং কোনও অতিরিক্ত সিনট্যাক্স নেই।

দ্রষ্টব্য: আমি ড্যাপারকে আমার মাইক্রো orm হিসাবে ব্যবহার করি, আমি ভাবছিলাম ADO এর মতো কাজ করা উচিত।


আমার প্রিয়, এখন পর্যন্ত সবচেয়ে সংক্ষিপ্ত উত্তর। সমস্ত উত্তরের মুল্য
জোপিসি

"বুলিয়ান হিসাবে দেখা কখনই শূন্য হতে পারে না (কমপক্ষে। নেট)" " (বুল?) হ'ল এক ন'ল বুল।
অ্যান্ড্রু ডেনিসন

1

অন্য সমতুল্য সমস্যাটি লক্ষ্য করুন: একটি এসকিউএল কোয়েরি তৈরি করা যা শর্তটি সন্তুষ্ট হলে (1) ফেরত দেয় এবং অন্যথায় ফাঁকা ফলাফল দেয়। লক্ষ্য করুন যে এই সমস্যার সমাধান আরও সাধারণ এবং আপনি যে প্রশ্নটি জিজ্ঞাসা করেছেন তা অর্জন করতে উপরের উত্তরগুলির সাথে সহজেই ব্যবহার করা যেতে পারে। যেহেতু এই সমস্যাটি বেশি সাধারণ, আমি আপনার সমস্যার উপরে উপস্থাপিত সুন্দর সমাধানগুলি ছাড়াও এর সমাধানটি প্রমাণ করছি।

SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)

1

আপনারা যারা কাস্টম কলামের নাম যুক্ত করতে আগ্রহী তাদের জন্য, এটি আমার পক্ষে কাজ করেছে:

CAST(
    CASE WHEN EXISTS ( 
           SELECT * 
           FROM mytable 
           WHERE mytable.id = 1
    ) 
    THEN TRUE 
    ELSE FALSE 
    END AS bool) 
AS "nameOfMyColumn"

নামের ক্ষেত্রে সংবেদনশীলতা রাখতে কিছু আগ্রহী না হলে আপনি কলামের নাম থেকে ডাবল উদ্ধৃতিগুলি এড়িয়ে যেতে পারেন (কিছু ক্লায়েন্টে)।

আমি এর জন্য @ চাদের উত্তরটি সামান্য টুইট করেছি।


এমএসজি 102, স্তর 15, রাজ্য 1, লাইন 8 'CAST' এর নিকটে ভুল সিনট্যাক্স। এমএসজি 156, স্তর 15, রাজ্য 1, লাইন 12 'THEN' কীওয়ার্ডের নিকটে ভুল সিনট্যাক্স।
শানেসি

@ শানেসি আমি পোস্টগ্রেএসকিউএল ৯ এক্স এ এই কোডটি পরীক্ষা করেছি এবং এটি ভাল কাজ করেছে। আপনি কোন সার্ভার ব্যবহার করছেন?
লুসিও মল্লিন্ডো

0
DECLARE @isAvailable      BIT = 0;

IF EXISTS(SELECT 1  FROM [User] WHERE (UserID = 20070022))
BEGIN
 SET @isAvailable = 1
END

প্রাথমিকভাবে isAv উপলভ্য বুলিয়ান মান 0 সেট করা হয়

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.