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을 얻을 수 없습니다.
bit
boolean
실제로는 아니지만 .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
당신이 사용할 수있는 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'로 시작하는 값이 없으면 비트 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
'Programing' 카테고리의 다른 글
URL 안에있는 routerLink에 매개 변수를 전달하는 방법은 무엇입니까? (0) | 2020.05.21 |
---|---|
매개 변수 선언에서 varchar (MAX)에 어떤 크기를 사용합니까? (0) | 2020.05.21 |
numpy 배열에서 특정 요소를 제거하는 방법 (0) | 2020.05.21 |
Enum이 인터페이스를 구현하는 이유는 무엇입니까? (0) | 2020.05.20 |
Windows 배치 스크립트에서 날짜 및 시간 형식 (0) | 2020.05.20 |