我想知道是否有可能做這樣的事情(不工作):是否可以直接選擇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