题
我查看了抽象不同表的列并预过滤并对它们进行预排序。有一列其内容我不关心,但我需要知道内容是否为空。所以我的视图应该传递一个别名为“ true ”如果此指定列的值不为空和“ false ”,则如果值为空。
如何用T-SQL选择这样的布尔值?
解决方案
您必须使用 CASE 语句:
SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
其他提示
或者你可以这样做:
SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
如果需要输出为布尔值
CAST(CASE WHEN colName IS NULL THEN 0 ELSE 1 END as BIT) aIsBooked
对于视图中的列,您可以使用类似
的内容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
我有一个类似的问题,我希望视图返回一个布尔列类型,基于实际列是否为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
你问了boolean,我们在t-sql中调用了bit。
其他答案要么给你一个varchar'true'和'false'或者1和0.'true'和'false'显然是varchar,而不是boolean。我相信1和0将被转换为整数,但它肯定不是一点点。这可能看起来很挑剔,但类型很重要。
要获得实际位值,您需要明确地将输出转换为:
select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
不隶属于 StackOverflow