¿Cómo generar un booleano en T-SQL basado en el contenido de una columna?
-
03-07-2019 - |
Pregunta
Hice una vista para resumir columnas de diferentes tablas y pre-filtrarlas y ordenarlas previamente. Hay una columna cuyo contenido no me importa, pero necesito saber si el contenido es nulo o no. Por lo tanto, mi vista debería pasar un alias como " true " en caso de que el valor de esta columna especificada no sea nulo y " falso " en caso de que el valor sea nulo .
¿Cómo puedo seleccionar un booleano con T-SQL?
Solución
Tienes que usar una declaración CASO para esto:
SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
Otros consejos
O puedes hacer esto:
SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
Si necesita una salida como booleana
CAST(CASE WHEN colName IS NULL THEN 0 ELSE 1 END as BIT) aIsBooked
para la columna en la vista puede usar algo como
CASE WHEN ColumnName is not null THEN 'True' ELSE 'False' END
o en una declaración
SELECT
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 'True' ELSE 'False' END [IsAchieved]
FROM Schools s
o para un procesamiento posterior, lo utilizaría personalmente
SELECT
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 1 ELSE 0 END [IsAchieved]
FROM Schools s
Tuve un problema similar en el que quería que una vista devolviera un tipo de columna booleana basada en si una columna real es nula o no. Creé una función definida por el usuario así:
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
Luego, la vista que creé devuelve una columna de bits, en lugar de un entero.
CREATE VIEW testView
AS
SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted]
FROM Company
Usted solicitó un valor booleano, que llamamos bit en t-sql.
Otras respuestas te han dado un varchar 'true' y 'false' o 1 y 0. 'true' y 'false' son obviamente varchar, no booleanos. Creo que 1 y 0 se emitirían como un entero, pero ciertamente no es un poco. Esto puede parecer delicado, pero los tipos importan con bastante frecuencia.
Para obtener un valor de bit real, debe convertir su salida explícitamente un poco como:
select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName