सवाल कॉलम की सामग्री के आधार पर टी-एसक्यूएल में बूलियन कैसे आउटपुट करें?


मैंने अलग-अलग तालिकाओं के सार स्तंभों और प्री-फ़िल्टर के लिए एक दृश्य बनाया और उन्हें पूर्व-क्रमबद्ध किया। एक कॉलम है जिसकी सामग्री मुझे परवाह नहीं है लेकिन मुझे यह जानने की ज़रूरत है कि सामग्री शून्य है या नहीं। तो मेरा विचार उपनाम को "सच"इस निर्दिष्ट कॉलम के मूल्य के मामले में शून्य नहीं है तथा "असत्य"मूल्य के मामले में शून्य है

क्या यह टी-एसक्यूएल (माइक्रोसॉफ्ट एसक्यूएल सर्वर 2000) के साथ संभव है?

अग्रिम में धन्यवाद!


40
2017-10-01 11:02


मूल




जवाब:


आपको एक का उपयोग करना होगा मामला इसके लिए बयान:

SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;

64
2017-10-01 11:07



एक आकर्षण की तरह काम करता है, धन्यवाद। :) - Anheledir
इसके परिणामस्वरूप वर्चर (5) -कॉम मेरे लिए दृश्य पर, बुलियन नहीं है। मैं क्या गलत कर रहा हूं? - Geir Sagberg
@uffjohn एसक्यूएल में "सत्य" या "झूठी" जैसी कोई चीज़ नहीं है। आम तौर पर यह या तो 1 या 0, एक "बिट" ध्वज है। यदि आप इसे .NET कोड या किसी चीज़ में उपयोग कर रहे हैं, तो आप इस मान को बुलियन में डाल सकते हैं। - alc6379
या करो CAST(CASE WHEN columnName IS NULL THEN 0 ELSE 1 END AS BIT) FROM tableName - Travis Parks
यह सिर्फ गलत है। 'सच' बुलियन नहीं है। कॉलम को बिट के रूप में लेबल करना थोड़ा सा नहीं है। - Steve Sether


या आप ऐसा कर सकते हैं:

    SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable

21
2018-06-17 11:55



यह मेरे लिए काम किया है, विशेष रूप से एक के साथ CAST(CASE WHEN <predicate> THEN 1 ELSE 0 END) AS BIT)। - Geir Sagberg
CAST(0 AS bit) जिसकी मुझे तलाश थी वह है। - psulek


यदि आपको बूलियन के रूप में आउटपुट की आवश्यकता है

CAST(CASE WHEN colName IS NULL THEN 0  ELSE 1   END as BIT) aIsBooked

14
2018-02-05 02:41





दृश्य में कॉलम के लिए आप कुछ ऐसा उपयोग कर सकते हैं

CASE WHEN ColumnName is not null THEN 'True' ELSE 'False' END

या एक बयान में

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 'True' ELSE 'False' END [IsAchieved]
FROM Schools s

या बाद में आगे प्रसंस्करण के लिए मैं व्यक्तिगत रूप से उपयोग करेंगे

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 1 ELSE 0 END [IsAchieved]
FROM Schools s

8
2017-10-01 11:11





मेरे पास एक समान मुद्दा था जहां मैं एक बूलियन कॉलम प्रकार को वापस देखने के लिए एक दृश्य चाहता था, यदि वास्तविक कॉलम शून्य या नहीं। मैंने एक उपयोगकर्ता परिभाषित फ़ंक्शन बनाया है जैसे:

CREATE FUNCTION IsDatePopulated(@DateColumn as datetime)
RETURNS bit
AS
BEGIN
    DECLARE @ReturnBit bit;

    SELECT @ReturnBit = 
        CASE WHEN @DateColumn IS NULL 
            THEN 0 
            ELSE 1 
        END

    RETURN @ReturnBit
END

फिर मैंने जो दृश्य बनाया है वह एक पूर्णांक की बजाय थोड़ा कॉलम देता है।

CREATE VIEW testView
AS
    SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted] 
    FROM Company

5
2018-05-31 00:23





आपने बुलियन के लिए पूछा, जिसे हम टी-एसक्यूएल में थोड़ा कहते हैं।

अन्य उत्तरों ने आपको या तो एक 'वर्च' और 'झूठा' या 1 और 0. 'सत्य' और 'झूठा' स्पष्ट रूप से वर्चर दिया है, बुलियन नहीं है। मुझे विश्वास है कि 1 और 0 को पूर्णांक के रूप में डाला जाएगा, लेकिन यह निश्चित रूप से थोड़ा सा नहीं है। यह नाइट-पिक्य प्रतीत हो सकता है, लेकिन प्रकार अक्सर अक्सर मायने रखता है।

वास्तविक बिट मान प्राप्त करने के लिए, आपको अपने आउटपुट को स्पष्ट रूप से थोड़ा सा डालना होगा:

तालिका का चयन करें जब tableName.columnName NULL है तो कास्ट करें (0 बिट के रूप में) अन्यथा कास्ट करें (1   बिट के रूप में) तालिका नाम से ColumnLabel के रूप में अंत


3
2018-02-03 20:42



अच्छा, उपयोगी और सही: सही डेटा के साथ पॉप्युलेट किए गए WPF DataGrid के DataGridCheckBoxColumn को स्वत: उत्पन्न करने के लिए उपयोग किया जाता है। - Andrea Antonangeli