如何根据列的内容在T-SQL中输出布尔值?

Anh*_*dir 49 sql sql-server-2000

我提出了一个视图来抽象不同表的列并预过滤并对它们进行预排序.有一列其内容我不关心,但我需要知道内容是否为空.所以,我认为应该通过一个别名为" 真实的情况下,"这个规定列的值不为空和" 虚假的情况下,"价值是零.

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

Ada*_*ire 72

您必须为此使用CASE语句:

SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
Run Code Online (Sandbox Code Playgroud)

  • 或者`CAST(当列名为IS NULL,然后0结束,结束为1)时,从tableName`执行 (20认同)
  • 这会在我的视图上产生varchar(5)列,而不是布尔值.我究竟做错了什么? (2认同)
  • @uffjohn在Sql中没有"true"或"false"这样的东西.通常它是1或0,一个"位"标志.如果你在.NET代码中使用它,你可以将这个值转换为布尔值. (2认同)

Sch*_*apz 23

或者你可以这样做:

    SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,特别是对于`CAST(当谓词<谓词>那么1节0结束时)). (4认同)
  • `CAST(0 AS bit)` 就是我正在寻找的。 (2认同)

Mah*_*esh 18

如果需要输出作为布尔值

CAST(CASE WHEN colName IS NULL THEN 0  ELSE 1   END as BIT) aIsBooked
Run Code Online (Sandbox Code Playgroud)


toc*_*oft 9

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

CASE WHEN ColumnName is not null THEN 'True' ELSE 'False' END
Run Code Online (Sandbox Code Playgroud)

或在声明中

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 'True' ELSE 'False' END [IsAchieved]
FROM Schools s
Run Code Online (Sandbox Code Playgroud)

或者我以后会进一步处理

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 1 ELSE 0 END [IsAchieved]
FROM Schools s
Run Code Online (Sandbox Code Playgroud)


lcr*_*pas 6

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

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
Run Code Online (Sandbox Code Playgroud)

然后我创建的视图返回一个位列,而不是整数.

CREATE VIEW testView
AS
    SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted] 
    FROM Company
Run Code Online (Sandbox Code Playgroud)


Ste*_*her 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
Run Code Online (Sandbox Code Playgroud)