Como a saída de um boolean em T-SQL com base no conteúdo de uma coluna?
-
03-07-2019 - |
Pergunta
Eu fiz um fim de colunas abstratas de tabelas diferentes e pré-filtro e pré-sort-los. Há uma coluna cujo conteúdo eu não se preocupam, mas eu preciso saber se o conteúdo é nulo ou não. Então meu ponto de vista deve passar um alias como " true " no caso do valor dessa coluna especificada não é nulo e " false " no caso o valor é nula .
Como posso seleccionar um tal boolean com T-SQL?
Solução
Você tem que usar um CASE declaração para isso:
SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
Outras dicas
Ou você pode fazer assim:
SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
Se você precisa de uma saída como boolean
CAST(CASE WHEN colName IS NULL THEN 0 ELSE 1 END as BIT) aIsBooked
para a coluna na vista que você pode usar algo como
CASE WHEN ColumnName is not null THEN 'True' ELSE 'False' END
ou em um comunicado
SELECT
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 'True' ELSE 'False' END [IsAchieved]
FROM Schools s
ou para processamento adicional depois eu usaria pessoalmente
SELECT
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 1 ELSE 0 END [IsAchieved]
FROM Schools s
Eu tive um problema semelhante onde eu queria uma vista para retornar um tipo de coluna booleana com base em se uma coluna real, nulo ou não. Eu criei uma função definida pelo usuário assim:
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
Em seguida, a visão que eu criei retorna uma coluna bit, em vez de um inteiro.
CREATE VIEW testView
AS
SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted]
FROM Company
Você pediu boolean, que chamamos pouco em t-sql.
Outras respostas, quer tenham lhe dado um varchar 'true' e 'false' ou 1 e 0. 'true' e 'false' são, obviamente, varchar, não boolean. Eu acredito 1 e 0 seria elenco como um inteiro, mas certamente não é um pouco. Isto pode parecer nit-exigente, mas tipos importa com bastante frequência.
Para obter um valor de bits real, você precisa para lançar sua saída explicitamente como um pouco como:
select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName