복붙노트

[SQL] 공간을 무시 쿼리

SQL

공간을 무시 쿼리

무엇 때문에 필드에 공백이있는 쿼리를 실행하는 가장 좋은 방법 무시? 예를 들어, 다음 쿼리 :

SELECT * FROM mytable WHERE username = "JohnBobJones"    
SELECT * FROM mytable WHERE username = "John Bob Jones"

다음 항목을 찾아 낼 것입니다 :

John Bob Jones
JohnBob Jones
JohnBobJones

나는 PHP 나 Python을 사용하고 있지만이 문제가되지 않습니다 생각합니다.

해결법

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

    1.

    SELECT * FROM mytable 
        WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
    
  2. ==============================

    2.때에 따라 다르지. 당신이 좋은 성능을 신경 쓰지 않는 경우가 당신이 할 수있는 일이 많이 있지만 대부분은 느려집니다. 어쩌면 당신의 확인,하지만 난 빠른 솔루션을 원하십니까 읽는 경우 다른 여기에이 대답을 떠날 것입니다.

    때에 따라 다르지. 당신이 좋은 성능을 신경 쓰지 않는 경우가 당신이 할 수있는 일이 많이 있지만 대부분은 느려집니다. 어쩌면 당신의 확인,하지만 난 빠른 솔루션을 원하십니까 읽는 경우 다른 여기에이 대답을 떠날 것입니다.

    당신은 당신이 데이터베이스에 공백없이 인덱스 문자열을해야 매우 빠른 성능을합니다. PostgreSQL의에서는 함수에 인덱스를 만들 수 있습니다. 당신은 빈 문자열로 대체 공백 컬럼에 인덱스를 만들려면이를 사용할 수 있습니다. 이 방법의 장점은 인덱스를 생성에서 유지 보수가 따로 필요 없다는 것입니다.

    공백 및없이 한 번에 한 번 - 가장 간단한 방법은 데이터베이스의 데이터를 복제하는 것, 그래서 MySQL의에서 당신은이 작업을 수행 할 수 없습니다. 당신의 SELECT 열 목록에서 WHERE 절에 공백없이 열하지만, ​​원래의 열을 사용합니다. 열이 동기화에 보관해야합니다 이것은 더 유지 보수가 필요합니다. 당신은 응용 프로그램 논리 또는 데이터베이스 트리거와 함께이 작업을 수행 할 수 있습니다.

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

    3.이 같은 뭔가 쿼리를 제한 할 수있는 경우 제안 된 솔루션 보면 아주 잘하지만, 성능 끔찍

    이 같은 뭔가 쿼리를 제한 할 수있는 경우 제안 된 솔루션 보면 아주 잘하지만, 성능 끔찍

    MYTABLE SELECT * FROM     WHERE 이름을 '존 %'및 REPLACE (사용자 이름, '', '') = REPLACE ( "요한 밥 존스 ',' ',' ')와 같은

    또한 당신은 정규 표현식을 사용할 수 있습니다.

    MYTABLE SELECT * FROM     어디에서 사용자 이름을 정규 표현식과 '^ 존 * 밥 * 존스'

    그리고 일반적으로 나쁜 생각에있는의 성능, 조작을 기억합니다.

    http://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html에보세요

  4. ==============================

    4.이 시도:

    이 시도:

    SELECT * FROM mytable WHERE username =REPLACE("John Bob Jones", ' ', '')
    
  5. ==============================

    5.우리는 종종 관계없이 공간, 공백 및 문자의 수, 텍스트를 검색합니다.

    우리는 종종 관계없이 공간, 공백 및 문자의 수, 텍스트를 검색합니다.

    그냥 소문자, 트림, 하나 개의 공간에 대해 모두 다수의 비 단어 문자를 대체합니다.

    SELECT regexp_replace(trim(lower('Here is              a            long               text               , with            many                 white spaces         AND             different                 character              sensitive')),'\W+',' ','g') t 
    

    반환 : 여기에 많은 공백 및 다른 문자와 소문자를 구별와 긴 텍스트입니다

    여기에 검색을위한 사용이다. 만 단어의 순서는 중요, 아무것도 더 있으면이 아름답습니다.

    select * from (
    SELECT regexp_replace(trim(lower('Here is              a            long               text               , with            many                 white spaces         AND             different                 character              sensitive')),'\W+',' ','g') t 
    ) as o
    where t= regexp_replace(trim(lower('Here  is a LonG      TEXT , with            mANY white   ^    spaces         AND           different  character              sensiTive')),'\W+',' ','g')
    

    반환 : 여기에 많은 공백 및 다른 문자와 소문자를 구별와 긴 텍스트입니다

    쿼리의 데이터 및 쓰레기의 쓰레기,하지만 여전히 마우스 오른쪽 찾습니다.

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

    6.한 가지 방법은 쿼리 기준을 구축 LIKE 와일드 카드를 사용하는 것입니다. 뭔가 같은 :

    한 가지 방법은 쿼리 기준을 구축 LIKE 와일드 카드를 사용하는 것입니다. 뭔가 같은 :

    사용자 이름이 'JohnBobJones을'LIKE MYTABLE SELECT * FROM;

  7. from https://stackoverflow.com/questions/2709929/query-that-ignore-the-spaces by cc-by-sa and MIT license