공백을 무시하는 쿼리
필드의 공백이 무시되도록 쿼리를 실행하는 가장 좋은 방법은 무엇입니까?예를 들어 다음과 같은 쿼리가 있습니다.
SELECT * FROM mytable WHERE username = "JohnBobJones"
SELECT * FROM mytable WHERE username = "John Bob Jones"
는 다음 항목을 찾을 수 있습니다.
John Bob Jones
JohnBob Jones
JohnBobJones
저는 php나 python을 사용하고 있지만 이것은 중요하지 않다고 생각합니다.
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
사정에 따라 다르겠지.좋은 성적에 연연하지 않는다면 할 수 있는 일은 많지만 대부분은 느릴 것입니다.아마 괜찮을지 모르지만, 다른 사람들이 빠른 해결책을 원할 경우를 대비해서 이 답을 여기에 남겨두겠습니다.
매우 빠른 성능을 원하는 경우 데이터베이스에 공백 없이 문자열을 인덱싱해야 합니다.포스트그레에서SQL 함수에 인덱스를 만들 수 있습니다.이를 사용하여 공백이 빈 문자열로 대체된 열에 색인을 작성할 수 있습니다.이 방법의 장점은 인덱스를 만드는 것과 별도로 유지보수가 필요하지 않다는 것입니다.
MySQL에서는 이 작업을 수행할 수 없으므로 가장 간단한 방법은 데이터베이스에 있는 데이터를 공백이 있는 경우와 없는 경우를 복제하는 것입니다.WHERE 절에는 공백이 없는 열을 사용하지만 SELECT 열 목록에는 원래 열을 사용합니다.이를 위해서는 열을 동기화 상태로 유지해야 하기 때문에 더 많은 유지보수가 필요합니다.응용프로그램 로직 또는 데이터베이스 트리거를 사용하여 이 작업을 수행할 수 있습니다.
제안된 솔루션은 매우 좋아 보이지만 다음과 같은 것으로 쿼리를 제한할 수 있는 경우 성능에 좋지 않습니다.
SELECT * FROM mytable
WHERE username like 'John%' and REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
REGEXP를 사용할 수도 있습니다.
SELECT * FROM mytable
WHERE username REGEXP '^John *Bob *Jones'
일반적으로 좋지 않은 생각을 가지고 있는 곳에서의 성능과 운영을 기억해야 합니다.
http://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html 을 확인해 보십시오.
시도해 보기:
SELECT * FROM mytable WHERE username =REPLACE("John Bob Jones", ' ', '')
공백, 공백 및 문자 수에 관계없이 텍스트를 검색하는 경우가 많습니다.
한 칸에 대해 모든 다중 접이식 Non-word 문자를 다듬고 소문자를 내리고 바꾸기만 하면 됩니다.
SELECT regexp_replace(trim(lower('Here is a long text , with many white spaces AND different character sensitive')),'\W+',' ','g') t
return : 여기에 많은 공백과 다양한 문자가 포함된 긴 텍스트가 있습니다.
검색 용도는 다음과 같습니다.단어의 순서만 중요할 뿐 그 이상은 아닙니다.그리고 이것은 아름답습니다.
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')
return:여기에는 많은 공백과 다양한 문자가 포함된 긴 텍스트가 있습니다.
데이터에 쓰레기가 들어있고 쿼리에 쓰레기가 들어있지만 여전히 올바르게 검색됩니다.
한 가지 방법은 LIKE 및 WildCards를 사용하여 쿼리 기준을 구축하는 것입니다.다음과 같은 경우:
선택 * 내 테이블에서 'JohnBobJones'와 같은 사용자 이름을 선택합니다;
언급URL : https://stackoverflow.com/questions/2709929/query-that-ignore-the-spaces
'programing' 카테고리의 다른 글
Woocommerce 주문내역에 상품선택비용 표시 (0) | 2023.10.15 |
---|---|
multicolumn unique key mysql insert (0) | 2023.10.15 |
jQuery $.browser가 감가상각되었습니까? (0) | 2023.10.15 |
특정 커밋샤를 위해 GitHub에서 .zip을 다운로드하는 방법? (0) | 2023.10.15 |
스프링부츠 + 스웨거 + 커스텀 스웨거 -ui.html (0) | 2023.10.15 |