是否可以直接selectEXISTS?
我想知道是否有可能做这样的事情(这是行不通的):
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
似乎它应该是可行的,但很多事情应该在SQL中工作不);我已经看到了解决方法(select1其中…存在…),但似乎我应该能够将存在函数的结果作为一点点,并用它来完成。
不,您必须使用解决方法。
如果你必须返回一个条件位0/1,另一种方法是:
SELECT CAST( CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1 ELSE 0 END AS BIT)
SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%'
当你投了一下
- 0 – > 0
- 一切 – > 1
- 而NULL – > NULL当然,但是你不能用COUNT(*)得到NULL而没有GROUP BY
bit
直接映射到.net数据types的boolean
,即使它不是真的…
这看起来相似,但没有行(不为零),如果没有匹配,所以它是不一样的
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
我对此有点迟了, 只是偶然发现了这个post。 不过,这里的解决scheme比选定的答案更有效率,而且应该具有相同的function:
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
您可以使用IIF
和CAST
SELECT CAST(IIF(EXISTS(SELECT * FROM theTable where theColumn like 'theValue%'), 1, 0) AS BIT)
您还可以执行以下操作:
SELECT DISTINCT 1 FROM theTable WHERE theColumn LIKE 'theValue%'
如果没有以'theValue'开始的值,这将会返回null(没有logging),而不是0
不,这是不可能的。 位数据types不是布尔数据types。 它是一个整型数据types,可以是0,1或NULL。
我相信存在只能在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