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?
Vous devez utiliser une instruction CASE pour cela:
SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
Ou vous pouvez faire comme ça:
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 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
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
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