복붙노트

[SQL] 같은 '%'NULL 값을 허용하지 않습니다

SQL

같은 '%'NULL 값을 허용하지 않습니다

나는 사용자의 입력에서 빌드 (HTML 양식을 통해 통과) 인 쿼리가 있습니다. 그것은 (간단한 예제) 다음과 같습니다

Select * From [table] Where [table].[column] like '<parameter>'

사용자가 입력 필드 내가 %를 통과 비우 해당 왼쪽 경우이 매개 변수는 선택 그렇게 할 수있다. 내가 NULL 값을 발생 때까지 벌금을했다. 난 안 널 (null)이 '%'경기 기호를 이해하지만이 경우 빈 문자열로 NULL을 고려하고 싶습니다.

어떻게해야합니까? 변경 쿼리 (어떻게?) 또는 다른 기호를 통과 (들) 사용자가 빈 입력을 떠날 때?

감사.

추신. 그것은 기존 시스템에서 실제 문제이고 나는 그것을 멀리 최적의 솔루션에서 알고,하지만 난 그것을 처리해야한다.

해결법

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

    1.당신은 빈 문자열처럼 취급 null로 유착을 사용할 수 있습니다 :

    당신은 빈 문자열처럼 취급 null로 유착을 사용할 수 있습니다 :

    where COALESCE([table].[column],'') like '<parameter>'
    

    SQL 서버에서, 당신은 또한 ISNULL을 사용할 수 있습니다 :

    where IsNull([table].[column],'') like '<parameter>'
    
  2. ==============================

    2.

    isnull([table].[column], '') like '%'
    

    작품 매력

  3. ==============================

    3.나는이 힘의 일을 생각한다 :

    나는이 힘의 일을 생각한다 :

    Select * From [table] Where [table].[column] is null or [table].[column] like '<parameter>'
    
  4. ==============================

    4.음, 방법에 대한

    음, 방법에 대한

    SELECT 
      * 
    FROM 
      [table] 
    WHERE
      ([table].[column] like <parameter>) OR 
      (<parameter> = '%')
    

    당신은 '%'를 통과 할 때 ... 그래서, 당신은 당신이 순간에 그것을 가지고있는 것처럼 그렇지 않으면 작동, 다시 모든 행을 얻을.

  5. ==============================

    5.방법에 대한 ..

    방법에 대한 ..

    Select * From [table] Where ISNULL([table].[column], '') like '<parameter>'
    

    이것은 실제 열 값을 취할 것, 또는 그게 전부가 빈 문자열을 null에 비교한다면 그것은 당신의 사용 MS SQL 서버를 가정하여 매개 변수를 aganist 그래서 ..

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

    6.두 문장을 만들 어라! 사용자는 더 매개 변수 사용자를 통과하지 않는 경우 :

    두 문장을 만들 어라! 사용자는 더 매개 변수 사용자를 통과하지 않는 경우 :

    Select * From [table] Where [table].[column] like '%' or [table].[column] is null;
    
  7. ==============================

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

    8.좋은 하루,이 솔루션을 사용하여, 나는 그것이 솔루션의 혼합물 생각 :

    좋은 하루,이 솔루션을 사용하여, 나는 그것이 솔루션의 혼합물 생각 :

    @parameter nvarchar (30)
    
    if @parameter = ''
          Begin
              Set @parameter = '%'
          End
    
    select * from [table] as t where ISNULL (t. [column], '') like '%' + @parameter + '%'
    

    그냥 매개 변수를 시작하려는 경우, 첫 번째 '%'와 더하기 기호를 제거

    나는 당신이 도움이되기를 바랍니다

  9. ==============================

    9.나는 때 입력 비슷한 실제로 '%'를 발견 할 수 있도록 (모든)를 포함하여 널 (null) 또는 특정 값을 원했다.

    나는 때 입력 비슷한 실제로 '%'를 발견 할 수 있도록 (모든)를 포함하여 널 (null) 또는 특정 값을 원했다.

    오라클 ISNULL이 작동하지 않습니다를 들어 내 경우 COALESCE도있다.

    나는 where 절에이 옵션을 사용합니다 :

    where decode(table1.field1,null,' ',table1.field1) like '%'
    

    그것은 다른 사람을 위해 작동 바랍니다.

  10. ==============================

    10.SQLite는 대한

    SQLite는 대한

    SELECT * FROM [table] WHERE IFNULL([table].[column],'') like '<parameter>'
    
  11. from https://stackoverflow.com/questions/3924400/like-does-not-accept-null-value by cc-by-sa and MIT license