비트 타입 조건절에서 모두 조회. 0 4 838

by 한번사는인생 [SQLServer] [2022.02.09 16:11:23]


테이블 컬럼이 비트 타입입니다.

프로시저에서 인풋 파라미터로 값을 받아서

비트 타입의 컬럼을 0일때 조회 / 1일때 조회 / 모두( 0 / 1 ) 조회 하려고 합니다.

간결하고 성능을 좋게하기 위해서 어떠한 방법으로 짜야할까요.ㅠ.ㅠ

by 마농 [2022.02.09 17:25:02]
-- 성능은 잘 모르겠네요. 쿼리는 다음과 같이 --
SELECT *
  FROM t
 WHERE @p IS NULL
    OR c = @p
;

 


by 한번사는인생 [2022.02.09 17:31:12]

고맙습니다.

삭제여부와 같은 컬럼을 만들때 저는 비트 타입으로 만듭니다.

그러면 BIT를 TINYINT로 변경하여, 비트연산을 해서 조회하는건 어떻게 생각하시나요?

예를 들어 0 / 1 을 1 / 2로 변경하여.

파라미터값을 1 / 2 / 3 을 하여.

1이 들어오면 1만 조회 / 2가 들어오면 2만 조회 / 3이 들어오면 1 / 2 모두 조회.


by 마농 [2022.02.09 17:34:13]
-- 파라미터 0, 1, NULL(모두조회) 로 답변 드린 것입니다.
SELECT *
  FROM t
 WHERE @p IS NULL
    OR c = @p
;
-- 파라미터 1, 2, 3(모두조회) 라고 해도 쿼리는 유사합니다.
SELECT *
  FROM t
 WHERE @p = 3
    OR c = @p
;
-- 파라미터 1, 2, 3(모두조회) 으로 비트연산(&)도 가능하겠네요.
-- 다만 성능은 어찌 될지 모르겠네요.
SELECT *
  FROM t
 WHERE c & @p > 0
;

 


by 한번사는인생 [2022.02.09 17:43:56]

항상 고맙습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입