Как вывести логическое значение в T-SQL на основе содержимого столбца?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Я создал представление для абстрактных столбцов разных таблиц и предварительно отфильтровал и отсортировал их.Есть один столбец, содержимое которого меня не волнует, но мне нужно знать, является ли содержимое нулевым или нет.Таким образом, мой взгляд должен передавать псевдоним как "верно" в случае, если значение этого указанного столбца не является нулевым и "ложь" в случае, если значение равно нулю.

Как я могу выбрать такое логическое значение с помощью T-SQL?

Это было полезно?

Решение

Вы должны использовать КЕЙС заявление для этого:

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

Другие советы

Или вы можете сделать вот так:

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

Если вам нужен вывод в виде логического значения

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

для столбца в представлении вы можете использовать что-то вроде

CASE WHEN ColumnName is not null THEN 'True' ELSE 'False' END

или в заявлении

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 'True' ELSE 'False' END [IsAchieved]
FROM Schools s

или для дальнейшей обработки после этого я бы лично использовал

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 1 ELSE 0 END [IsAchieved]
FROM Schools s

У меня была аналогичная проблема, когда я хотел, чтобы представление возвращало логический тип столбца в зависимости от того, является ли фактический столбец нулевым или нет.Я создал определяемую пользователем функцию следующим образом:

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

Затем созданное мной представление возвращает столбец bit вместо целого числа.

CREATE VIEW testView
AS
    SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted] 
    FROM Company

Вы запросили логическое значение, которое мы называем bit в t-sql.

Другие ответы либо дали вам переменные 'true' и 'false', либо 1 и 0."true" и "false", очевидно, являются varchar, а не boolean .Я полагаю, что 1 и 0 будут приведены как целое число, но это, конечно, не бит.Это может показаться придирчивым, но типы имеют значение довольно часто.

Чтобы получить фактическое битовое значение, вам нужно явно преобразовать свой вывод примерно так:

select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top