복붙노트

[SQL] 그것은 선택하는 것이 가능하다 비트로 직접 EXISTS?

SQL

그것은 선택하는 것이 가능하다 비트로 직접 EXISTS?

그것은 이런 식으로 뭔가를 (작업을하지 않는) 할 수 있는지 궁금 해서요 :

(표 SELECT * FROM 존재 ((캐스트를 선택 어디 비트에 '값 %'))와 같은 열

그것을 행할 수 있어야처럼 보인다,하지만 SQL에서 작동해야 일이 많이 안) 내가 어디 하나를 선택합니다 (이것에 대한 해결 방법을 본 적이 ... 존재 ...)하지만 난 할 수 있어야 것처럼 보인다 단지 (가) 조금으로 기능을 존재와 함께 할 수의 결과를 캐스팅.

해결법

  1. ==============================

    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
    
  2. ==============================

    2.

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

    당신은 비트 캐스팅 할 때

    비트는 정말 아닌 경우에도, .NET 데이터 유형에 논리 값으로 직접 매핑 ...

    이것은 비슷하지만 동일하지 그래서, 아니 일치하는 경우에는 행 (안 제로)를 제공하지 않습니다

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

    3.나는이에 대한 이해에 늦게 비트 해요; 다만 포스트를 우연히 발견했다. 그러나 여기에서 선택한 답변보다 더 효율적이고 깔끔한이지만, 동일한 기능을 제공해야하는 솔루션이다 :

    나는이에 대한 이해에 늦게 비트 해요; 다만 포스트를 우연히 발견했다. 그러나 여기에서 선택한 답변보다 더 효율적이고 깔끔한이지만, 동일한 기능을 제공해야하는 솔루션이다 :

    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
    
  4. ==============================

    4.당신은 IIF 및 CAST를 사용할 수 있습니다

    당신은 IIF 및 CAST를 사용할 수 있습니다

    SELECT CAST(IIF(EXISTS(SELECT * FROM theTable 
                           where theColumn like 'theValue%'), 1, 0) AS BIT)
    
  5. ==============================

    5.또한 다음을 수행 할 수 있습니다 :

    또한 다음을 수행 할 수 있습니다 :

    SELECT DISTINCT 1
      FROM theTable
     WHERE theColumn LIKE 'theValue%'
    

    오히려 비트 0하지만 이상이 널 (NO 레코드) 반환 'theValue'로 시작하는 모든 값이없는 경우

  6. ==============================

    6.아니, 할 수 없습니다. 비트 데이터 유형은 부울 데이터 타입이다. 그것은 0, 1, 또는 NULL이 될 수있는 정수 데이터 유형입니다.

    아니, 할 수 없습니다. 비트 데이터 유형은 부울 데이터 타입이다. 그것은 0, 1, 또는 NULL이 될 수있는 정수 데이터 유형입니다.

  7. ==============================

    7.

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

    8.또 다른 해결책은 SELECT TOP 1 1 나란히 ISNULL을 사용하는 것입니다 :

    또 다른 해결책은 SELECT TOP 1 1 나란히 ISNULL을 사용하는 것입니다 :

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

    9.나는 (where 절로서 존재 또는 하위 쿼리) 당신이 해결해야 할 것이다, 그래서에만, where 절에서 사용할 수있는 존재 믿습니다. 내가 해결 등의 경우 그 수를 알 수 없습니다.

    나는 (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
    
  10. from https://stackoverflow.com/questions/2759756/is-it-possible-to-select-exists-directly-as-a-bit by cc-by-sa and MIT license