[SQL] WHERE NULL이 절은 SQL Server 매개 변수 값에 따라 NULL 또는 NO가 없습니다
SQLWHERE NULL이 절은 SQL Server 매개 변수 값에 따라 NULL 또는 NO가 없습니다
나는 매개 변수 값을 기준으로 검색을 수행 SQL Server 2000에서 저장 프로 시저가 있습니다. 절의 값에 따라 WHERE에 전달 된 매개 변수 중 하나, 나는 다른 필요 - 문제는 3 개 값이 곳 MyColumn이 될 것입니다
나는 올바른 구문을 세우는 약간의 정신 블록을 보내고 있습니다. BEGIN @parameter ... END의 분기를 일부 IF를 수행하지 않고 하나의 select 문에서이게 가능을 할까?
해결법
-
==============================
1.다음은 WHERE 절 하나를 사용하여이 문제를 해결하는 방법입니다 :
다음은 WHERE 절 하나를 사용하여이 문제를 해결하는 방법입니다 :
WHERE (@myParm = value1 AND MyColumn IS NULL) OR (@myParm = value2 AND MyColumn IS NOT NULL) OR (@myParm = value3)
나는 다음과 같은 의미 case 문의 순진 사용이 이것에 의해,하지 작업을 수행합니다 :
SELECT Field1, Field2 FROM MyTable WHERE CASE @myParam WHEN value1 THEN MyColumn IS NULL WHEN value2 THEN MyColumn IS NOT NULL WHEN value3 THEN TRUE END
case 문을 사용하여이 문제를 해결 답을 onedaywhen의 볼 수 있습니다
-
==============================
2.당신은 같은 것을 할 수 있습니다 :
당신은 같은 것을 할 수 있습니다 :
SELECT * FROM foo WHERE (@param = 0 AND MyColumn IS NULL) OR (@param = 1 AND MyColumn IS NOT NULL) OR (@param = 2)
뭐 그런.
-
==============================
3.이것은이 사용 사례를 수행 할 수있는 방법입니다 :
이것은이 사용 사례를 수행 할 수있는 방법입니다 :
DECLARE @myParam INT; SET @myParam = 1; SELECT * FROM MyTable WHERE 'T' = CASE @myParam WHEN 1 THEN CASE WHEN MyColumn IS NULL THEN 'T' END WHEN 2 THEN CASE WHEN MyColumn IS NOT NULL THEN 'T' END WHEN 3 THEN 'T' END;
-
==============================
4.
WHERE MyColumn = COALESCE(@value,MyColumn)
참조 : COALESCE (Transact-SQL)를 참조하십시오.
-
==============================
5.CASE의 다른 방법 :
CASE의 다른 방법 :
SELECT * FROM MyTable WHERE 1 = CASE WHEN @myParm = value1 AND MyColumn IS NULL THEN 1 WHEN @myParm = value2 AND MyColumn IS NOT NULL THEN 1 WHEN @myParm = value3 THEN 1 END
-
==============================
6.나는이 솔루션으로 성공을 거두었습니다. 그것은 약간의 트위스트와 함께 거의 패트릭 같다. 당신은 개별적으로 또는 순차적으로 이러한 식을 사용할 수 있습니다. 매개 변수가 비어있는 경우, 그것은 무시되고 열의 모든 값은 사용자의 검색이 NULLS를 포함하여 표시됩니다.
나는이 솔루션으로 성공을 거두었습니다. 그것은 약간의 트위스트와 함께 거의 패트릭 같다. 당신은 개별적으로 또는 순차적으로 이러한 식을 사용할 수 있습니다. 매개 변수가 비어있는 경우, 그것은 무시되고 열의 모든 값은 사용자의 검색이 NULLS를 포함하여 표시됩니다.
SELECT * FROM MyTable WHERE --check to see if @param1 exists, if @param1 is blank, return all --records excluding filters below (Col1 LIKE '%' + @param1 + '%' OR @param1 = '') AND --where you want to search multiple columns using the same parameter --enclose the first 'OR' expression in braces and enclose the entire --expression ((Col2 LIKE '%' + @searchString + '%' OR Col3 LIKE '%' + @searchString + '%') OR @searchString = '') AND --if your search requires a date you could do the following (Cast(DateCol AS DATE) BETWEEN CAST(@dateParam AS Date) AND CAST(GETDATE() AS DATE) OR @dateParam = '')
-
==============================
7.이러한 논리가 존재하여 구현 될 수있다 :
이러한 논리가 존재하여 구현 될 수있다 :
CREATE TABLE tab(a INT, b VARCHAR(10)); INSERT INTO tab(a,b) VALUES(1,'a'),(1, NULL),(NULL, 'a'),(2,'b');
질문:
DECLARE @a INT; --SET @a = 1; -- specific NOT NULL value --SET @a = NULL; -- NULL value --SET @a = -1; -- all values SELECT * FROM tab t WHERE EXISTS(SELECT t.a INTERSECT SELECT @a UNION SELECT @a WHERE @a = '-1');
DB <> 바이올린 데모
여러 PARAMS을 포함하도록 확장 할 수 있습니다 :
SELECT * FROM tab t WHERE EXISTS(SELECT t.a INTERSECT SELECT @a UNION SELECT @a WHERE @a = '-1') AND EXISTS(SELECT t.b INTERSECT SELECT @b UNION SELECT @a WHERE @b = '-1');
from https://stackoverflow.com/questions/810714/where-is-null-is-not-null-or-no-where-clause-depending-on-sql-server-parameter by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 11g - 정규식 체크 제약 조건 (0) | 2020.06.06 |
---|---|
[SQL] 루프없이 SQL 날짜에 영업일 추가 (0) | 2020.06.06 |
[SQL] 오라클 SQL : 다른 삽입 존재 업데이트하는 경우 [중복] (0) | 2020.06.05 |
[SQL] SQL에서 두 행을 병합 (0) | 2020.06.05 |
[SQL] 연결 풀링을 사용하는 동안 방법, 물리적으로 가까이에도록 SqlConnection을 강제로? (0) | 2020.06.05 |