Comment générer un booléen dans T-SQL en fonction du contenu d'une colonne?

StackOverflow https://stackoverflow.com/questions/157114

  •  03-07-2019
  •  | 
  •  

Question

J'ai créé 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 m'importe peu, mais j'ai besoin de savoir si le contenu est nul ou non. Mon avis doit donc passer un alias comme suit: " true ". au cas où la valeur de la colonne spécifiée ne soit pas nulle et " false ". au cas où la valeur est nulle .

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

Était-ce utile?

La solution

Vous devez utiliser une instruction CASE pour cela:

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

Autres conseils

Ou vous pouvez faire comme ceci:

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

Si vous avez besoin d'une sortie booléenne

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

pour la colonne dans 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

J'avais un problème similaire dans lequel je souhaitais qu'une vue renvoie un type de colonne booléen en fonction de la valeur null ou non d'une colonne réelle. J'ai créé une fonction définie par l'utilisateur comme suit:

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

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

D’autres réponses vous ont donné un varchar 'true' et 'false' ou 1 et 0. 'true' et 'false' sont évidemment varchar et non boolean. Je crois que 1 et 0 seraient exprimés sous la forme d'un entier, mais ce n'est certainement pas un peu. Cela peut sembler capricieux, mais les types importent assez souvent.

Pour obtenir une valeur de bit réelle, vous devez convertir explicitement votre sortie comme suit:

select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top