我想知道是否可以做这样的事情(这不起作用):
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
似乎它应该是可行的,但是许多应该在SQL中工作的东西不会;)我已经看到了这方面的解决方法(SELECT 1 where ... Exists ...)但似乎我应该是能够将存在函数的结果转换为一点并完成它。
答案 0 :(得分:251)
不,你必须使用一种解决方法。
如果必须返回条件位0/1,则另一种方法是:
SELECT CAST(
CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1
ELSE 0
END
AS BIT)
或没有演员:
SELECT
CASE
WHEN EXISTS( SELECT 1 FROM theTable WHERE theColumn LIKE 'theValue%' )
THEN 1
ELSE 0
END
答案 1 :(得分:46)
SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%'
当你施展到位
bit
直接映射到.net数据类型中的boolean
,即使它不是真的......
这看起来很相似但如果没有匹配则不给出行(不为零),所以它不是相同的
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
答案 2 :(得分:11)
我对这个问题有点迟了;只是偶然发现了这个帖子。然而,这是一个更有效的解决方案。比选定的答案整洁,但应该提供相同的功能:
declare @t table (name nvarchar(16))
declare @b bit
insert @t select N'Simon Byorg' union select N'Roe Bott'
select @b = isnull((select top 1 1 from @t where name = N'Simon Byorg'),0)
select @b whenTrue
select @b = isnull((select top 1 1 from @t where name = N'Anne Droid'),0)
select @b whenFalse
答案 3 :(得分:7)
您可以使用IIF
和CAST
SELECT CAST(IIF(EXISTS(SELECT * FROM theTable
where theColumn like 'theValue%'), 1, 0) AS BIT)
答案 4 :(得分:4)
您还可以执行以下操作:
SELECT DISTINCT 1
FROM theTable
WHERE theColumn LIKE 'theValue%'
如果没有以'theValue'开头的值,这将返回null(无记录)而不是0位
答案 5 :(得分:2)
不,不可能。位数据类型不是布尔数据类型。它是一个整数数据类型,可以是0,1或NULL。
答案 6 :(得分:0)
SELECT IIF(EXISTS(SELECT * FROM theTable WHERE theColumn LIKE 'theValue%'), 1, 0)
答案 7 :(得分:0)
另一种解决方案是将ISNULL
与SELECT TOP 1 1
一起使用:
SELECT ISNULL((SELECT TOP 1 1 FROM theTable where theColumn like 'theValue%'), 0)
答案 8 :(得分:-1)
我相信 exists 只能在where子句中使用,所以你必须做一个变通方法(或者将where子句作为where子句)。我不知道这是否算作一种解决方法。
这个怎么样:
create table table1 (col1 int null)
go
select 'no items',CONVERT(bit, (select COUNT(*) from table1) ) -- returns 'no items', 0
go
insert into table1 (col1) values (1)
go
select '1 item',CONVERT(bit, (select COUNT(*) from table1) ) --returns '1 item', 1
go
insert into table1 (col1) values (2)
go
select '2 items',CONVERT(bit, (select COUNT(*) from table1) ) --returns '2 items', 1
go
insert into table1 (col1) values (3)
go
drop table table1
go