jco*_*lum 178 sql t-sql sql-server
我想知道是否有可能做这样的事情(这不起作用):
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
看起来它应该是可行的,但许多应该在SQL中工作的东西不会;)我已经看到了这方面的解决方法(SELECT 1 where ... Exists ...)但似乎我应该能够将存在函数的结果转换为一点并完成它.
Ale*_* K. 258
不,你必须使用一种解决方法.
如果必须返回条件位0/1,则另一种方法是:
SELECT CAST(
CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1
ELSE 0
END
AS BIT)
Run Code Online (Sandbox Code Playgroud)
或者没有演员:
SELECT
CASE
WHEN EXISTS( SELECT 1 FROM theTable WHERE theColumn LIKE 'theValue%' )
THEN 1
ELSE 0
END
Run Code Online (Sandbox Code Playgroud)
gbn*_*gbn 50
SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%'
Run Code Online (Sandbox Code Playgroud)
当你投射到位
bit直接映射到boolean.net数据类型,即使它不是真的......
这看起来很相似,但如果没有匹配则不给出行(不为零),所以它不一样
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
Run Code Online (Sandbox Code Playgroud)
Joh*_*van 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
Run Code Online (Sandbox Code Playgroud)
你可以使用IIF和CAST
SELECT CAST(IIF(EXISTS(SELECT * FROM theTable
where theColumn like 'theValue%'), 1, 0) AS BIT)
Run Code Online (Sandbox Code Playgroud)
小智 5
您还可以执行以下操作:
SELECT DISTINCT 1
FROM theTable
WHERE theColumn LIKE 'theValue%'
Run Code Online (Sandbox Code Playgroud)
如果没有以 'theValue' 开头的值,这将返回 null(无记录)而不是位 0