sql 쿼리 true=>true,false=>참 또는 거짓
-
20-08-2019 - |
문제
간단한 쿼리를 가능하게 불가능하지만 내가 알고 있는 몇몇 똑똑한 사람들이있다:)
주 boolean 변수,나를 정의한 내 where 절을 제한 하거나 특정 열 출력-또는 아무것도 할 수 없습니다.
주어진,그래서 매개 변수@bit=1 이 결과는:
는 열=1
지정된 매개 변수@bit=0 이 결과는:
는 열=1 또는 0
즉아무 효과도 없/모든 결과(열의 비트 필드)
나는 원하지 않는 dynamic sql-I 정착 할 수 있는 고정이 이 코드에서 하지만 난 그냥을 궁금해 있는 경우에는 몇몇 똑똑한 마술는 위의 깔끔하고 간단합니다.
입니까?나는 sql 을 사용하여 서버입니다.
환호:D
해결책
대답 column = 1 or @bit = 0
열이 0 또는 1 일 수있는 경우 작동하는 경우 열이 원하는 값인 경우 : column = 1 or @bit = 0 and column = 0
.
다른 팁
SELECT *
FROM mytable
WHERE column = 1 OR @bit = 0
색인이있는 경우 column1
, 이것은 더 효율적일 것입니다 :
SELECT *
FROM mytable
WHERE column = 1 AND @bit = 1
UNION ALL
SELECT *
FROM mytable
WHERE @bit = 0
단일의 성능 비교를 위해 내 블로그 에서이 기사를 참조하십시오. WHERE
조건 대 UNION ALL
:
where column BETWEEN @bit AND 1
select *
from MyTable
where (@bit = 0 OR MyColumn = 1)
select ...
from [table]
where @bit = 0 or (column = @bit)
나는 다른 대답하고 느꼈 벙어리를 볼 때에 합의 대답이다.그래서 단지를 위한 약혼자에게 차이자,두 비교하여 내 자신의 데이터베이스입니다.지는 않지만 알고 있는 경우 그들은 정말로 비슷하지만,내가 실행 계획은 약간의 장점을 나의 구피 답변:
선택*
됩니다.
는 곳에 열 <>경우@면 1 다음 0 다른 -1end
나는 깨닫는 인덱스,테이블 크기,등등.에 영향을 미칠 수 있다.
또한,당신은 아마 당신을 실현할 수 없을 비교하 -1...
았다고 생각을 공유합니다.
이 시도
select ...
from table
where column = case when @bit = 0 then 0 else column end
이것은 열의 데이터 유형이 무엇이든 관계없이 작동합니다 (예 : 문자열 일 수도 있습니다). 물론 그것이 다른 기본값이 될 것입니다 (0이 아님)
여기서 열> = @bit
그러나 이것은 숫자 열에서> 0 값에 대해서만 작동합니다. @bit은 데이터 유형 우선 순위로 인해 int, smallint 등에 암시 적으로 캐스트됩니다.