Programing

EXISTS를 비트로 직접 선택할 수 있습니까?

crosscheck 2020. 5. 21. 20:32
반응형

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)

또는 캐스트없이 :

SELECT
   CASE
       WHEN EXISTS( SELECT 1 FROM theTable WHERE theColumn LIKE 'theValue%' )
            THEN 1 
       ELSE 0 
   END

SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like 'theValue%'

당신이 비트로 캐스팅 할 때

  • 0-> 0
  • 다른 모든 것-> 1
  • 물론 NULL-> NULL이지만 GROUP BY가 없으면 COUNT (*)로 NULL을 얻을 수 없습니다.

bitboolean실제로는 아니지만 .net 데이터 유형으로 직접 매핑됩니다 .

이것은 비슷해 보이지만 일치하는 행이 없으면 (0이 아닌) 행을 제공하지 않으므로 동일하지 않습니다.

SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'

나는 이것에 대해 조금 늦었다. 게시물을 우연히 발견했습니다. 그러나 여기에 선택한 답변보다 효율적이고 깔끔하지만 동일한 기능을 제공하는 솔루션이 있습니다.

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

당신이 사용할 수있는 IIFCAST

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'로 시작하는 값이 없으면 비트 0이 아닌 null (레코드 없음)을 반환합니다.


불가능합니다. 비트 데이터 형식이 부울 데이터 형식이 아닙니다. 0,1 또는 NULL 일 수있는 정수 데이터 유형입니다.


SELECT IIF(EXISTS(SELECT * FROM theTable WHERE theColumn LIKE 'theValue%'), 1, 0)

또 다른 해결책은 다음 ISNULL과 함께 사용 하는 것입니다 SELECT TOP 1 1.

SELECT ISNULL((SELECT TOP 1 1 FROM theTable where theColumn like 'theValue%'), 0)

나는 존재 는 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

참고URL : https://stackoverflow.com/questions/2759756/is-it-possible-to-select-exists-directly-as-a-bit

반응형