我想知道是否有可能做这样的事情(不工作):是否可以直接选择EXISTS?
select cast((exists(select * from theTable where theColumn like 'theValue%') as bit)
好像它应该是可行的,但很多事情,应该在SQL工作没有; )我已经看到了这方面的解决方法(SELECT 1 where ... Exists ...),但似乎我应该能够将存在函数的结果作为一点点,并完成它。
我想知道是否有可能做这样的事情(不工作):是否可以直接选择EXISTS?
select cast((exists(select * from theTable where theColumn like 'theValue%') as bit)
好像它应该是可行的,但很多事情,应该在SQL工作没有; )我已经看到了这方面的解决方法(SELECT 1 where ... Exists ...),但似乎我应该能够将存在函数的结果作为一点点,并完成它。
不,你将不得不使用一种变通方法。
如果必须退回条件比特0/1另一种方式是:
SELECT CAST(
CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1
ELSE 0
END
AS BIT)
不,这是不可能的。位数据类型不是布尔数据类型。它是一个整型数据类型,可以是0,1或NULL。
有点不能为空。 :) – bzlm 2010-05-03 17:59:38
@bzlm是的,它可以在SQLServer中使用10年以上。 SQL Server 7.0引入了它http://msdn.microsoft.com/en-us/library/aa237157%28SQL.80%29。aspx – 2010-05-03 18:09:25
@bzlm - 这听起来像是在抓着吸管,并没有真正了解SQL Server数据类型。 SQL Server中位的定义是“可以取值为1,0或NULL的整数数据类型”。 http://msdn.microsoft.com/en-us/library/ms177603.aspx。这适用于列和Transact SQL变量。例如,无论在哪个位置都可以将一个变量用作SQL中的布尔值,例如“IF(@TRUE)”,反之亦然,布尔表达式可以强制为一个位。 (例如'SET @BitVariable =(1 = 1)') – 2010-05-03 20:24:23
SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%'
当你施放到位
bit
直接映射到boolean
在.net中的数据类型,即使它是不是真的?
这看起来类似,但给人如果没有匹配任何行(不为零),所以它是不一样的
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
我相信存在只能在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
选择中的情况如何? – lowerkey 2013-02-08 15:45:49
你也可以做到以下几点:
SELECT DISTINCT 1
FROM theTable
WHERE theColumn LIKE 'theValue%'
如果没有启动,没有价值观“theValue”这将返回null(没有记录),而不是位0虽然
我对此有点迟了;只是偶然发现了这个帖子。但是这里有一个解决方案,它是更有效&比所选答案整齐,但应给予相同的功能:
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)
我喜欢这个,但它只适用于SQL Server 2012及更高版本。看起来IIF是在2012年添加的 – ja928 2016-09-13 14:41:47
SELECT IIF(EXISTS(SELECT * FROM theTable WHERE theColumn LIKE 'theValue%'), 1, 0)
如果要将结果存储到位数据类型,因为该转换已经是隐式的。 – MikeTeeVee 2013-04-08 10:22:21
刚刚测试过这种技术,效果很好。 CAST to BIT不需要从SQL Server 2008 R2测试的查询中检索结果。 – 2015-03-31 09:09:03
在我的情况下,演员必须被删除 – 2018-03-06 17:56:28