EXISTES를 직접 선택할 수 있습니까?
다음과 같은 작업을 수행할 수 있는지 궁금했습니다(실패).
select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)
실행 가능한 것처럼 보이지만 SQL에서 동작해야 할 많은 것들이 그렇지 않습니다.(SELECT 1에서는...) 이 문제에 대한 회피책을 보았습니다.존재함...)하지만 존재함수의 결과를 조금 캐스팅하고 끝낼 수 있을 것 같습니다.
아니요, 해결 방법을 사용해야 합니다.
조건부 비트 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
- 또한 특수한 순서 -> 특수한 순서입니다만, GROUP BY가 없으면 카운트(*)를 사용하여 NULL을 취득할 수 없습니다.
bit
직접 맵boolean
.net datatype을 사용합니다.설령 그게 아니더라도...
이것은 비슷해 보이지만 일치하지 않으면 행(0이 아님)이 표시되지 않으므로 동일하지 않습니다.
SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like 'theValue%'
사용할 수 있습니다.IIF
그리고.CAST
SELECT CAST(IIF(EXISTS(SELECT * FROM theTable
where theColumn like 'theValue%'), 1, 0) AS BIT)
나는 이것을 이해하는데 조금 늦었다; 그냥 우연히 포스트를 발견했다.다만, 여기에서는, 선택한 회답보다 효율적이고 깔끔하지만, 같은 기능을 제공할 필요가 있는 솔루션이 있습니다.
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
다음 작업도 수행할 수 있습니다.
SELECT DISTINCT 1
FROM theTable
WHERE theColumn LIKE 'theValue%'
'theValue'로 시작하는 값이 없는 경우 비트 0이 아닌 null(레코드 없음)을 반환합니다.
SELECT IIF(EXISTS(SELECT * FROM theTable WHERE theColumn LIKE 'theValue%'), 1, 0)
아니, 그건 불가능해.비트 데이터 형식이 부울 데이터 형식이 아닙니다.0, 1 또는 NULL을 지정할 수 있는 정수 데이터 유형입니다.
또 다른 해결책은ISNULL
와 병행하여SELECT TOP 1 1
:
SELECT ISNULL((SELECT TOP 1 1 FROM theTable where theColumn like 'theValue%'), 0)
exists는 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
'source' 카테고리의 다른 글
여러 개의 수식 키를 사용한WPF에서의 KeyBinding 작성 (0) | 2023.04.12 |
---|---|
C#을 사용하여 Excel 파일의 데이터를 읽는 방법 (0) | 2023.04.12 |
ID 열 값을 프로그래밍 방식으로 변경하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
베스트 프랙티스가 없는 경우 SQL Server 삽입 (0) | 2023.04.07 |
SQL 서버에서 상위 100개 레코드를 업데이트하려면 어떻게 해야 합니까? (0) | 2023.04.07 |