[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.
SELECT * FROM mytable WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
-
==============================
2.때에 따라 다르지. 당신이 좋은 성능을 신경 쓰지 않는 경우가 당신이 할 수있는 일이 많이 있지만 대부분은 느려집니다. 어쩌면 당신의 확인,하지만 난 빠른 솔루션을 원하십니까 읽는 경우 다른 여기에이 대답을 떠날 것입니다.
때에 따라 다르지. 당신이 좋은 성능을 신경 쓰지 않는 경우가 당신이 할 수있는 일이 많이 있지만 대부분은 느려집니다. 어쩌면 당신의 확인,하지만 난 빠른 솔루션을 원하십니까 읽는 경우 다른 여기에이 대답을 떠날 것입니다.
당신은 당신이 데이터베이스에 공백없이 인덱스 문자열을해야 매우 빠른 성능을합니다. PostgreSQL의에서는 함수에 인덱스를 만들 수 있습니다. 당신은 빈 문자열로 대체 공백 컬럼에 인덱스를 만들려면이를 사용할 수 있습니다. 이 방법의 장점은 인덱스를 생성에서 유지 보수가 따로 필요 없다는 것입니다.
공백 및없이 한 번에 한 번 - 가장 간단한 방법은 데이터베이스의 데이터를 복제하는 것, 그래서 MySQL의에서 당신은이 작업을 수행 할 수 없습니다. 당신의 SELECT 열 목록에서 WHERE 절에 공백없이 열하지만, 원래의 열을 사용합니다. 열이 동기화에 보관해야합니다 이것은 더 유지 보수가 필요합니다. 당신은 응용 프로그램 논리 또는 데이터베이스 트리거와 함께이 작업을 수행 할 수 있습니다.
-
==============================
3.이 같은 뭔가 쿼리를 제한 할 수있는 경우 제안 된 솔루션 보면 아주 잘하지만, 성능 끔찍
이 같은 뭔가 쿼리를 제한 할 수있는 경우 제안 된 솔루션 보면 아주 잘하지만, 성능 끔찍
MYTABLE SELECT * FROM WHERE 이름을 '존 %'및 REPLACE (사용자 이름, '', '') = REPLACE ( "요한 밥 존스 ',' ',' ')와 같은
또한 당신은 정규 표현식을 사용할 수 있습니다.
MYTABLE SELECT * FROM 어디에서 사용자 이름을 정규 표현식과 '^ 존 * 밥 * 존스'
그리고 일반적으로 나쁜 생각에있는의 성능, 조작을 기억합니다.
http://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html에보세요
-
==============================
4.이 시도:
이 시도:
SELECT * FROM mytable WHERE username =REPLACE("John Bob Jones", ' ', '')
-
==============================
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.한 가지 방법은 쿼리 기준을 구축 LIKE 와일드 카드를 사용하는 것입니다. 뭔가 같은 :
한 가지 방법은 쿼리 기준을 구축 LIKE 와일드 카드를 사용하는 것입니다. 뭔가 같은 :
사용자 이름이 'JohnBobJones을'LIKE MYTABLE SELECT * FROM;
from https://stackoverflow.com/questions/2709929/query-that-ignore-the-spaces by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 저장 프로 시저 / 함수는 테이블을 반환 할 수 있나요? (0) | 2020.05.22 |
---|---|
[SQL] 그것은 다른 아이에 의해 참조되어 있지 않은 경우 삭제 부모 (0) | 2020.05.22 |
[SQL] 오라클 SQL의 맞춤 주문 (0) | 2020.05.22 |
[SQL] 어떻게 오라클 VARCHAR 값의 문자의 발생 수를 계산하려면? (0) | 2020.05.22 |
[SQL] MySQL은 : 어떻게 특정 지점에서 자동 증가를 시작합니까? (0) | 2020.05.22 |