web-dev-qa-db-fra.com

Comment sortir un booléen en T-SQL en fonction du contenu d'une colonne?

J'ai fait une vue pour résumer les colonnes de différentes tables et les pré-filtrer et les pré-trier. Il y a une colonne dont le contenu ne m'importe pas, mais j'ai besoin de savoir si le contenu est nul ou non. Donc, ma vue doit passer un alias comme " true " dans le cas où la valeur de cette colonne spécifiée n'est pas nulle et " false "dans le cas où la valeur est nulle.

Comment puis-je sélectionner un tel booléen avec T-SQL?

48
Anheledir

Vous devez utiliser une instruction CASE pour cela:

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

Ou vous pouvez faire comme ça:

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

Si vous avez besoin d'une sortie booléenne

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

pour la colonne de la vue, vous pouvez utiliser quelque chose comme

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

ou dans une déclaration

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

ou pour un traitement ultérieur, j'utiliserais personnellement

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

J'ai eu un problème similaire où je voulais qu'une vue retourne un type de colonne booléenne en fonction de si une colonne réelle était nulle ou non. J'ai créé une fonction définie par l'utilisateur comme ceci:

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

Ensuite, la vue que j'ai créée renvoie une colonne de bits, au lieu d'un entier.

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

Vous avez demandé booléen, que nous appelons bit en t-sql.

D'autres réponses vous ont donné soit un varchar "vrai" et "faux", soit 1 et 0. "vrai" et "faux" sont évidemment varchar, pas booléens. Je crois que 1 et 0 seraient exprimés en entier, mais ce n'est certainement pas un peu. Cela peut sembler difficile, mais les types importent assez souvent.

Pour obtenir une valeur réelle en bits, vous devez convertir votre sortie explicitement en un peu comme:

select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
4
Steve Sether