[SQL] 같은 '%'NULL 값을 허용하지 않습니다
SQL같은 '%'NULL 값을 허용하지 않습니다
나는 사용자의 입력에서 빌드 (HTML 양식을 통해 통과) 인 쿼리가 있습니다. 그것은 (간단한 예제) 다음과 같습니다
Select * From [table] Where [table].[column] like '<parameter>'
사용자가 입력 필드 내가 %를 통과 비우 해당 왼쪽 경우이 매개 변수는 선택 그렇게 할 수있다. 내가 NULL 값을 발생 때까지 벌금을했다. 난 안 널 (null)이 '%'경기 기호를 이해하지만이 경우 빈 문자열로 NULL을 고려하고 싶습니다.
어떻게해야합니까? 변경 쿼리 (어떻게?) 또는 다른 기호를 통과 (들) 사용자가 빈 입력을 떠날 때?
감사.
추신. 그것은 기존 시스템에서 실제 문제이고 나는 그것을 멀리 최적의 솔루션에서 알고,하지만 난 그것을 처리해야한다.
해결법
-
==============================
1.당신은 빈 문자열처럼 취급 null로 유착을 사용할 수 있습니다 :
당신은 빈 문자열처럼 취급 null로 유착을 사용할 수 있습니다 :
where COALESCE([table].[column],'') like '<parameter>'
SQL 서버에서, 당신은 또한 ISNULL을 사용할 수 있습니다 :
where IsNull([table].[column],'') like '<parameter>'
-
==============================
2.
isnull([table].[column], '') like '%'
작품 매력
-
==============================
3.나는이 힘의 일을 생각한다 :
나는이 힘의 일을 생각한다 :
Select * From [table] Where [table].[column] is null or [table].[column] like '<parameter>'
-
==============================
4.음, 방법에 대한
음, 방법에 대한
SELECT * FROM [table] WHERE ([table].[column] like <parameter>) OR (<parameter> = '%')
당신은 '%'를 통과 할 때 ... 그래서, 당신은 당신이 순간에 그것을 가지고있는 것처럼 그렇지 않으면 작동, 다시 모든 행을 얻을.
-
==============================
5.방법에 대한 ..
방법에 대한 ..
Select * From [table] Where ISNULL([table].[column], '') like '<parameter>'
이것은 실제 열 값을 취할 것, 또는 그게 전부가 빈 문자열을 null에 비교한다면 그것은 당신의 사용 MS SQL 서버를 가정하여 매개 변수를 aganist 그래서 ..
-
==============================
6.두 문장을 만들 어라! 사용자는 더 매개 변수 사용자를 통과하지 않는 경우 :
두 문장을 만들 어라! 사용자는 더 매개 변수 사용자를 통과하지 않는 경우 :
Select * From [table] Where [table].[column] like '%' or [table].[column] is null;
-
==============================
7.이 방법 Where 절 문제에 인덱스를 기반으로
이 방법 Where 절 문제에 인덱스를 기반으로
where COALESCE([table].[column],'') like '<parameter>'
가 :
이 때문에 병합 기능으로, 당신의 [열]에 인덱스를 사용하는 경우, SQL Server가 인덱스를 사용하지 못할, 당신이 당신의 색인을 낭비했습니다 것을 의미한다
과
이 방법을 실행
Where [table].[column] like '%' or [table].[column] is null
가 :
.에서 [표] [열]가 NULL 인 경우, 코드는 다음과 같을 것이다 :
Where null like '%' or [table].[column] is null
상관없이 어디에 절 번째 부분 ([표]. [컬럼] 널) UNKNOWN와 SQL 서버 필터를 해당 레코드 밖으로 평가의 결과가 될 것입니다.
NULL OR 진정한 = UNKNOWN
NULL 또는 FALSE = UNKNOWN
이것은 최적화 된 null을 포함 접근되도록 :
Select * From [table] WHERE CASE WHEN [table].[column] IS NULL THEN 1 WHEN [table].[column] like '<parameter>' THEN 1 ELSE 0 END = 1
-
==============================
8.좋은 하루,이 솔루션을 사용하여, 나는 그것이 솔루션의 혼합물 생각 :
좋은 하루,이 솔루션을 사용하여, 나는 그것이 솔루션의 혼합물 생각 :
@parameter nvarchar (30) if @parameter = '' Begin Set @parameter = '%' End select * from [table] as t where ISNULL (t. [column], '') like '%' + @parameter + '%'
그냥 매개 변수를 시작하려는 경우, 첫 번째 '%'와 더하기 기호를 제거
나는 당신이 도움이되기를 바랍니다
-
==============================
9.나는 때 입력 비슷한 실제로 '%'를 발견 할 수 있도록 (모든)를 포함하여 널 (null) 또는 특정 값을 원했다.
나는 때 입력 비슷한 실제로 '%'를 발견 할 수 있도록 (모든)를 포함하여 널 (null) 또는 특정 값을 원했다.
오라클 ISNULL이 작동하지 않습니다를 들어 내 경우 COALESCE도있다.
나는 where 절에이 옵션을 사용합니다 :
where decode(table1.field1,null,' ',table1.field1) like '%'
그것은 다른 사람을 위해 작동 바랍니다.
-
==============================
10.SQLite는 대한
SQLite는 대한
SELECT * FROM [table] WHERE IFNULL([table].[column],'') like '<parameter>'
from https://stackoverflow.com/questions/3924400/like-does-not-accept-null-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 C #을에서 날짜가 제대로 SQL로 전달하는 방법? (0) | 2020.06.06 |
---|---|
[SQL] "..에와"사이의 차이 "에 .. 어디"SQL 왼쪽에서 가입? [복제] (0) | 2020.06.06 |
[SQL] VARCHAR를 값을 변환 할 때 변환 int 데이터 형식 '단순한'를 실패한 (0) | 2020.06.06 |
[SQL] "수"버전으로 SQL 정렬, 다양한 길이의 문자열 (0) | 2020.06.06 |
[SQL] MySQL은 SELECT는 NOT IN이 (SELECT가 B의 X) WHERE A로부터 X - 예기치 않은 결과를 (0) | 2020.06.06 |