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

时间:2008-10-01 11:02:14

标签: sql sql-server-2000

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

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

7 个答案:

答案 0 :(得分:69)

您必须使用 CASE 语句:

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

答案 1 :(得分:23)

或者你可以这样做:

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

答案 2 :(得分:17)

如果需要输出为布尔值

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

答案 3 :(得分: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

答案 4 :(得分:5)

我有一个类似的问题,我希望视图返回一个布尔列类型,基于实际列是否为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

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

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

答案 5 :(得分:3)

你问了boolean,我们在t-sql中调用了bit。

其他答案或者给你一个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

答案 6 :(得分:1)

我认为这比其他解决方案要简单一些

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