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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top