SQL: LIKE 문의 쿼리 파라미터에 REGEXP_REPLACE 사용
대소문자를 무시한 행과 해당 열에 모두 존재할 수 있는 특수문자를 찾는 쿼리가 있습니다.그것을 위해 나는 사용한다.REGEXP_REPLACE
다음과 같습니다.
SELECT *
FROM Order
WHERE REGEXP_REPLACE(reference, '[^a-zA-Z0-9äöüÄÖÜ]', '') LIKE %:search%
어디에search
사용할 파라미터의 이름입니다.그건 먹히지만, 아직 소독한 건 아니야search
불필요한 특수 문자의 매개 변수입니다.
제가 하고 싶은 것은 다음과 같은 것입니다. 즉, 다음과 같은 것이 있습니다.REGEXP_REPLACE
오른쪽에도 있습니다.
SELECT *
FROM Order
WHERE REGEXP_REPLACE(reference, '[^a-zA-Z0-9äöüÄÖÜ]', '') LIKE %REGEXP_REPLACE(:search, '[^a-zA-Z0-9äöüÄÖÜ]', '')%
그러나 이 방법은 작동하지 않고 다음 오류가 나타납니다.
42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%REGEXP_REPLACE(
파라미터에 함수를 사용할 수 없거나LIKE
스테이트먼트?회피책이 있습니까?
LIKE 연산자에서 사용할 '%'로 시작하는 문자열과 끝나는 문자열을 생성하려는 것 같습니다.이를 위해서는 MySQL의 SQL 방언에서 내장된 문자열 조작 기능을 사용하여 문자열 조작을 명시적으로 수행해야 합니다.
쿼리에 텍스트 문자열이 필요한 모든 곳에서 이러한 함수를 사용할 수 있습니다.
이 문자열을 생성하려면 CONCAT를 다음과 같은 식으로 사용해 보십시오.LIKE 오른쪽에서 사용할 수 있습니다.
CONCAT('%', REGEXP_REPLACE(:search, '[^a-zA-Z0-9äöüÄÖÜ]', ''), '%')
나는 당신이 당신의 질문이 빠른 것을 원하지 않길 바랍니다.느릴 거예요.모든 가치를 검토해야 합니다.Order.reference
당신의 테이블에서.느리다 왜냐하면
- 땜에 어쩔 수 없다
WHERE f(column) LIKE whatever
,그리고. column LIKE '%something%'
모든 가치를 검토할 필요가 있다column
BTREE 인덱스를 랜덤으로 처리하는 것이 아니라
스케일업할 데이터베이스를 구축하는 경우 쿼리를 분할할 수 있도록 데이터베이스를 설계합니다.여기 Sargability는
WHERE cleaned_up_reference
LIKE CONCAT(REGEXP_REPLACE(:search, '[^a-zA-Z0-9äöüÄÖÜ]', ''), '%')
주역 없이%
검색 중인 열에 대한 함수를 평가하지 않고 오른쪽에 표시됩니다.
다음과 같이 시험해 보십시오.
SELECT * FROM Order a
WHERE REGEXP_REPLACE(a.reference, '[^a-zA-Z0-9äöüÄÖÜ]', '') LIKE '%:search%'
언급URL : https://stackoverflow.com/questions/70363383/sql-use-regexp-replace-on-query-parameter-inside-of-like-statement
'IT' 카테고리의 다른 글
여러 JFrame 사용:좋은 방법인가 나쁜 방법인가? (0) | 2023.01.12 |
---|---|
Servlet에서의 doGet 및 doPost (0) | 2023.01.12 |
MongoDB를 사용하여 MariaDB CONNECT 스토리지 엔진을 테스트하는 방법 - 커넥터가 존재합니까? (0) | 2023.01.12 |
표 'performance_schema'session_session'이 존재하지 않습니다. (0) | 2023.01.12 |
Python에서 권장 해제 경고를 무시하는 방법 (0) | 2023.01.01 |