Comment générer un booléen dans T-SQL en fonction du contenu d'une colonne?
-
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?
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