2014-03-12 3 views
6

영어로 죄송합니다.Sqlite - 영문자가 아닌 대/소문자를 구분하지 않음

나는 그 TITLE 필드 몇 가지 패턴 (경우-insensintive)을 충족 행을 검색하려면,이 필드는 하지 영어 문자가 포함되어 있습니다. 테이블은 하지 영어 문자가 포함되어 있기 때문에이 될 수있다, 작동하지 않는,

SEARCH * FROM TABLE_NAME WHERE UPPER(column_name) LIKE UPPER('%pattern%');

그러나 :

나는이 시도.

UPDATE :

예 :

SELECT * FROM PartnersTable WHERE UPPER(TitleColumn) LIKE UPPER('%pattern%') ; 

장소 :

TitleColumn"Газпром", "Лукойл", "Йотафон", "Мечта ювелира",

를 포함 할 수 있습니다

pattern"газ", "Ювелир" 등을 포함 할 수 있습니다.

+1

패턴과 일부 샘플 데이터를 게시 할 수 있습니까? – paqogomez

+0

나는 내 게시물을 편집했습니다 –

+2

@ LeonidSemyonov 해결책을 찾았습니까? – constpetrov

답변

2

열 정의에 COLLATE NOCASE을 사용하여 시도했습니다. 당신이 그것을 할 수 있다면, 이것은 갈 길입니다.

내가 테스트하는 것 : 귀하의 질문에 같은

CREATE TABLE PartnersTable 
    (`id` , `TitleColumn` COLLATE NOCASE) 
; 

추가 동일한 날짜 :

INSERT INTO PartnersTable 
    (`id`, `TitleColumn`) 
VALUES 
(1, 'Газпром'), (2, 'Лукойл'), (3, 'Йотафон'), (4, 'Мечта ювелира') 
; 

이 그 다음을 선택하려고 : 그것은 작동

select * 
from PartnersTable 
where TitleColumn like '%Ювелир%' 

합니다. 여기

데모 : http://sqlfiddle.com/#!7/ae8f8/2

편집 : 또한 UPPER없이 함께 사용할 수 있습니다. 기본적으로 LIKE은 대소 문자를 구분하지 않습니다. 문서 당 :

다른 모든 문자는 자체 또는 대문자와 동등한 문자 (대소 문자를 구분하지 않음)가 일치합니다. (버그 : SQLite는 ASCII 문자에 대해서만 대/소문자를 인식합니다 .LICKE 연산자는 ASCII 범위를 벗어나는 유니 코드 문자의 대소 문자를 구분합니다. 예를 들어 'a'LIKE 'A'는 TRUE이지만 'æ'LIKE 'Æ'는 FALSE입니다) "여기

데모 :.. http://sqlfiddle.com/#!7/c9b5d/1

0

Redifine처럼 기능 (이것은 SQLite는 .NET 래퍼를 사용) VB이 좋아도 참고 별표 (*) 와일드 카드를 사용하면 %를 원하는 경우 교체합니다.. 문자열 또는 GLOB를 대신 재정의하십시오.

 public static void OverrideLikeFunction() 
{ 
    SQLiteSpace.SQLiteFunction.RegisterFunction(typeof(SQLiteHelper.Ulike)); 

} 

[System.Data.SQLite.SQLiteFunction(FuncType=System.Data.SQLite.FunctionType.Scalar, Name="Like")] 
; 
     Public Class Ulike; 
      Inherits System.Data.SQLite.SQLiteFunction; 
      Public Overrides Function Invoke(args() As object) As object; 
      try 
      { 
        if (System.Convert.IsDBNull(args(0)) || System.Convert.IsDBNull(args(1))) 
        { 
         return false; 
        } 
        return (Microsoft.VisualBasic.CompilerServices.StringType.StrLike(System.Convert.ToString(args(1)).ToUpperInvariant(), System.Convert.ToString(args(0)).ToUpperInvariant(), Microsoft.VisualBasic.CompareMethod.Binary)); 
       } 
       catch (Exception ex) 
       { 
            return null; 
       } 
      } 

     } 
관련 문제