Мне было интересно, если это возможно сделать что-то вроде этого (что не работает):
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
Похоже, это должно быть выполнимо, но многие вещи, которые должны работать в SQL, не работают;) Я видел обходные пути для этого (SELECT 1, где ... существует ...), но кажется, что я должен просто приведите результат функции существует как бит и покончите с этим.
sql
sql-server
tsql
jcollum
источник
источник
Когда вы бросаете в бит
bit
сопоставляется непосредственно сboolean
типами данных .net, даже если это не совсем так ...Это выглядит похоже, но не дает строки (не ноль), если нет совпадений, так что это не то же самое
источник
EXISTS
,COUNT
будет продолжать искать данные на предмет соответствия строк даже после нахождения первой, потому что для этого нужно получить счетчик.Я немного опаздываю на это; просто наткнулся на пост. Однако вот решение, которое является более эффективным и аккуратным, чем выбранный ответ, но должно предоставлять такую же функциональность:
источник
Вы можете использовать
IIF
иCAST
источник
Вы также можете сделать следующее:
Если нет значений, начинающихся с 'theValue', это вернет null (без записей), а не бит 0, хотя
источник
Нет, это невозможно. Битовый тип данных не является логическим типом данных. Это целочисленный тип данных, который может быть 0,1 или NULL.
источник
IF(@TRUE)
например, и наоборот, логическое выражение не может быть приведено к битам. (НапримерSET @BitVariable = (1=1)
)Другое решение заключается в использовании
ISNULL
в тандеме сSELECT TOP 1 1
:источник
Я считаю, что существует можно использовать только в предложении where, поэтому вам придется обойти это решение (или подзапрос с существует в качестве предложения where). Я не знаю, считается ли это обходным решением.
Как насчет этого:
источник
источник