2012-09-23 2 views
2

LONGTEXT 열의 텍스트 중 특정 문자열을 일치시키기 위해 REGEXP를 사용하고 있습니다. 예를 들어 : MySQL REGEXP 정수 비교

Text text text text text 
text text text text text 
text text SOLD: 75/101 text 
text text text text text 

그래서 내 쿼리는 다음과 같이 찾고있다 : 제대로 SOLD: 75/101 문자열과 일치하는 것

SELECT * FROM `test` WHERE `file` REGEXP 
'SOLD:[ ]{1}[0-9]{1,2,3}/[0-9]{1,2,3}' 

합니다.

하지만 분자에 대한 비교를 할 수 있습니까? 예를 들어, 모두 SOLD: >=75/101을 찾으십니까?

비교 숫자는 $ _POST를 통해 사용자가 입력 한 숫자입니다. REGEXP는 실제로 숫자 비교를위한 것이 아니라는 것을 알고 있습니다. 어쩌면 어떤 방법이 있습니까 문자열을 regexp로 캡처 한 다음 다른 방법으로 정수를 비교할 수 있습니까?

+0

로직을 캡슐화하기 위해 저장 프로 시저를 생성 할 수 있습니다. – ravnur

+0

'76/101'과'123/101'과 같은 분수를 고려해야합니까, 아니면 '70/80'을 고려해야합니까? '75/101'보다 더 큼)? –

+0

@TimPietzcker 예, 처음 두 개를 고려해야합니다. 저는 분자 전체를 단지 분자로 비교하는 것에는 관심이 없습니다. – Norse

답변

3

SELECT * FROM mytable WHERE mycolumn REGEXP 
"SOLD: ([1-9][0-9]{2,}|[8-9][0-9]|7[5-9])/101"; 

일을해야 다음, 당신의 의견에 명시된 바와 같이, 분자 봐야합니다.

한편, [0-9]{1,2,3}은 대부분의 정규 표현식에서 구문 오류입니다 (MySQL이 어떻게 처리하는지 모르겠습니다). 범위를 지정하는 올바른 방법은 [0-9]{1,3}입니다.

+0

사용자가 입력 한 $ _POST 값은 80 또는 90이었습니다. – Norse

+0

아 맞아. 나는 그 부분을 철저히 읽지 않았습니다. 죄송합니다, MySQL 정규 표현식은 그룹 캡쳐를 지원하지 않으므로 실제로 사용자 정의 함수를 사용해야합니다. 불행히도 솔루션을 제안 할만큼 MySQL을 잘 모릅니다. –

+0

이것은 좋은 시작이다. 감사. – Norse