Как вывести логическое значение в T-SQL на основе содержимого столбца?
-
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