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)
Sch*_*apz 23
或者你可以这样做:
SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
Run Code Online (Sandbox Code Playgroud)
Mah*_*esh 18
如果需要输出作为布尔值
CAST(CASE WHEN colName IS NULL THEN 0 ELSE 1 END as BIT) aIsBooked
Run Code Online (Sandbox Code Playgroud)
对于视图中的列,您可以使用类似的内容
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)
我有一个类似的问题,我希望视图返回一个布尔列类型,基于实际列是否为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)
您要求布尔值,我们在 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)