Ответ 1
Для этого вам нужно использовать оператор CASE:
SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
Я сделал вид, чтобы абстрагировать столбцы разных таблиц, предварительно отфильтровать и предварительно отсортировать их. Есть один столбец, содержание которого мне не безразлично, но мне нужно знать, является ли содержимое пустым или нет. Поэтому мое представление должно передавать псевдоним как "true" в случае, если значение этого указанного столбца не равно нулю, и "false" в случае, если значение равно нулю.
Как я могу выбрать такой логический с T-SQL?
Для этого вам нужно использовать оператор CASE:
SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
Или вы можете сделать вот так:
SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
Если вам нужен вывод в виде boolean
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
Затем созданное мной представление возвращает бит столбца, а не целое число.
CREATE VIEW testView
AS
SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted]
FROM Company
Вы просили логическое значение, которое мы называем битом в 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