2010-04-05 1 views

답변

11

현재 정규식, 값이 정확히 한 자리 구성하지 일치 ... 나는 그냥 첫 번째 문자를 확인 있는지 확인하는 방법을 잘 모르겠어요,

SELECT DISTINCT(action) FROM actions 
WHERE qkey = 140 AND action NOT REGEXP '^[:digit:]$'; 

그러나 :이 있습니다 첫 번째 문자 만. $을 끝에서 제거하면 "가치 만료"를 의미합니다. 첫 번째 문자를 확인하기 만하면 문자를 확인합니다.

^[:digit:]이 작동합니다. "값의 시작과 그 뒤에 하나의 숫자"를 의미합니다.

+0

감사합니다. – TwixxyKit

20

처음에는 쿼리에 약간의 오류가 있습니다. 그것은해야한다 :

NOT REGEXP '^[[:digit:]]' 

참고 이중 사각 괄호. 또한로 다시 쓸 수 또한 빈 문자열을 일치 방지하기 위해 다음

REGEXP '^[^[:digit:]]' 

이 또한 사용하여 정규 표현식이 사용되는 인덱스를 방지주의와 테이블 스캔 또는 인덱스 스캔에서 발생합니다. 당신이 더 효율적인 쿼리를 원하는 경우에 당신은 가능한 경우 정규 표현식을 사용하지 않고 쿼리를 다시 시도해야합니다
SELECT DISTINCT(action) FROM actions 
WHERE qkey = 140 AND action < '0' 
UNION ALL 
SELECT DISTINCT(action) FROM actions 
WHERE qkey = 140 AND action >= ':' 

그런 다음 (qkey, 액션)에 인덱스를 추가 할 수 있습니다. 읽을만큼 즐겁지는 않지만 더 나은 성능을 제공해야합니다. 각 qkey에 대한 작업 수가 적다면 눈에 띄는 성능 향상이 나타나지 않으므로 더 간단한 쿼리 만 수행 할 수 있습니다.