Как вернуть логическое значение в SQL Select Statement?
Я попробовал этот код:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
И это только возвращает, TRUE
если UserID
существует на столе. Я хочу, чтобы он вернулся, FALSE
если UserID
на столе не существует.
SELECT WHEN CAST(1 AS BIT) THEN 'YES' END AS result
- приводит к ошибке, т. Е. НеCAST(1 AS BIT)
является той же логической ИСТИНОЙ.Ответы:
То, что у вас есть, вообще не вернет строки, если пользователь не существует. Вот что вам нужно:
источник
1
вместо*
.*
более идиоматичны. Смотрите этот вопрос .AS bool
часть очень важна):CAST( CASE WHEN EXISTS ( SELECT * FROM mytable WHERE mytable.id = 1) THEN TRUE ELSE FALSE END AS bool) AS nameofmycolumn
Возможно, что-то вроде этого:
http://sqlfiddle.com/#!3/5e555/1
источник
Учитывая, что обычно
1 = true
и0 = false
все, что вам нужно сделать, это подсчитать количество строк и привести кboolean
.Следовательно, вашему опубликованному коду нужна только
COUNT()
функция:источник
Exists(
теста намного быстрее, чем выполнениеCount(1)
теста для таблиц с большим количеством строк.UserID
проиндексирован (или даже является PK), вы наверняка идете прямо к единственной существующей строке (или нет).Используйте «Exists», который возвращает 0 или 1.
Запрос будет выглядеть так:
источник
Если count (*) = 0 возвращает false. Если count (*)> 0 возвращает true.
источник
Я делаю это так:
Видя, что логическое значение не может быть нулевым (по крайней мере, в .NET), оно должно по умолчанию иметь значение false или вы можете установить его на это значение самостоятельно, если значение по умолчанию равно true. Однако 1 = истина, поэтому нуль = ложь, и никакого дополнительного синтаксиса.
Примечание: я использую Dapper в качестве микроорганизма, я думаю, ADO должен работать так же.
источник
Обратите внимание на другую эквивалентную проблему: создание SQL-запроса, который возвращает (1), если условие выполнено, и пустой результат в противном случае. Обратите внимание, что решение этой проблемы носит более общий характер и может быть легко использовано с вышеуказанными ответами для достижения поставленного вами вопроса. Поскольку эта проблема носит более общий характер, я доказываю ее решение в дополнение к красивым решениям, представленным выше для вашей проблемы.
источник
Для тех из вас, кто заинтересован в получении значения, добавляя имя пользовательского столбца, это работает для меня:
Вы можете пропустить двойные кавычки из имени столбца, если вы не заинтересованы в сохранении чувствительности к регистру имени (в некоторых клиентах).
Я слегка подправил ответ @ Чада за это.
источник
изначально логическое значение isAvailable установлено в 0
источник