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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top