55

我对不同表的列进行了抽象,并对它们进行了预过滤和预排序。有一列的内容我不关心,但我需要知道内容是否为空。因此,如果此指定列的值不为 null,则我的视图应将别名传递为“ true ”,如果值为null ,则应将别名传递为“ false ” 。

如何使用 T-SQL 选择这样的布尔值?

4

7 回答 7

79

您必须为此使用CASE语句:

SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
于 2008-10-01T11:07:45.077 回答
27

或者你可以这样做:

    SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
于 2011-06-17T11:55:06.403 回答
20

如果您需要输出为布尔值

CAST(CASE WHEN colName IS NULL THEN 0  ELSE 1   END as BIT) aIsBooked
于 2015-02-05T02:41:28.230 回答
9

对于视图中的列,您可以使用类似

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
于 2008-10-01T11:11:56.687 回答
6

我有一个类似的问题,我希望视图根据实际列是否为空来返回布尔列类型。我创建了一个用户定义的函数,如下所示:

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
于 2011-05-31T00:23:37.943 回答
5

您要求布尔值,我们在 t-sql 中将其称为位。

其他答案要么给你一个 varchar 'true' 和 'false' 或 1 和 0。'true' 和 'false' 显然是 varchar,而不是布尔值。我相信 1 和 0 会被转换为整数,但肯定不是一点点。这可能看起来很挑剔,但类型很重要。

要获得实际的位值,您需要将输出显式转换为:

select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
于 2016-02-03T20:42:28.077 回答
1

我认为这比其他解决方案稍微简单一些:

SELECT Cast(ISNULL([column name], 0) AS BIT) AS IsWhatever

于 2020-07-17T16:09:14.090 回答