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

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

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

Ответы [ 6 ]

69 голосов
/ 01 октября 2008

Для этого вы должны использовать оператор CASE :

SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
23 голосов
/ 17 июня 2011

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

    SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
17 голосов
/ 05 февраля 2015

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

CAST(CASE WHEN colName IS NULL THEN 0  ELSE 1   END as BIT) aIsBooked
9 голосов
/ 01 октября 2008

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

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
6 голосов
/ 31 мая 2011

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

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

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

CREATE VIEW testView
AS
    SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted] 
    FROM Company
3 голосов
/ 03 февраля 2016

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

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

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

select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
...