Come generare un valore booleano in T-SQL in base al contenuto di una colonna?
-
03-07-2019 - |
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?
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