Domanda

Ho preso visione di astrarre colonne di diverse tabelle e pre-filtro e pre-ordinarle. C'è una colonna di cui non mi interessa il contenuto, ma devo sapere se il contenuto è nullo o meno. Quindi il mio punto di vista dovrebbe passare un alias come " vero " nel caso in cui il valore di questa colonna specificata non sia null e " false " nel caso in cui il valore sia nullo .

Come posso selezionare un tale valore booleano con T-SQL?

È stato utile?

Soluzione

Per questo devi usare una CASE :

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

Altri suggerimenti

Oppure puoi fare così:

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

Se hai bisogno di un output come booleano

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

per la colonna nella vista puoi usare qualcosa come

CASE WHEN ColumnName is not null THEN 'True' ELSE 'False' END

o in una dichiarazione

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 'True' ELSE 'False' END [IsAchieved]
FROM Schools s

o per ulteriori elaborazioni successive utilizzerei personalmente

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 1 ELSE 0 END [IsAchieved]
FROM Schools s

Ho avuto un problema simile in cui volevo che una vista restituisse un tipo di colonna booleana in base al fatto che una colonna effettiva fosse nulla o meno. Ho creato una funzione definita dall'utente in questo modo:

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

Quindi la vista che ho creato restituisce una colonna di bit, anziché un numero intero.

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

Hai chiesto booleano, che chiamiamo bit in t-sql.

Altre risposte ti hanno dato un varchar 'true' e 'false' oppure 1 e 0. 'true' e 'false' sono ovviamente varchar, non booleani. Credo che 1 e 0 verrebbero espressi come numero intero, ma certamente non è un po '. Questo può sembrare pignolo, ma i tipi contano abbastanza spesso.

Per ottenere un valore di bit effettivo, è necessario trasmettere esplicitamente l'output come un po 'come:

select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top