2010-12-30 6 views
2

정규식 목록을 가지고 있고 그 정규식을 전달하는 필드가있는 행을 반환하고 싶습니다. 그것은 정규 표현식에처럼 보이지 않는EJBQL/MySQL Regexes and IN

SELECT * FROM Foo as f WHERE f.bar IN ("regex1","regex2"); 

그래서 내가 네이티브 (MySQL의) 쿼리를 사용해야합니다 같은데요 EJBQL에서 모두 가능 : 다음과 같은 뭔가 어쨌든입니다.

답변

2

정규식을 하나로 결합하지 않는 이유는 무엇입니까?

"(?:" + regex1 + ")|(?:" + regex2 + ")" 

그래서 regex1 = "^.*foo(.*)bar"regex2 = "baz(.*)frob$", 당신은

(?:^.*foo(.*)bar)|(?:baz(.*)frob$) 
+0

+1 그게 전부다. 내 접근 방식보다 덜 복잡하고 아마 빠릅니다. – Tomalak

1

아니요, 불가능합니다. 적어도 당신이 생각하는 방식은 아닙니다.

다음과 같이하십시오. 정규식을 행으로 테이블에 삽입하십시오. 그런 다음 쿼리

SELECT 
    * 
FROM 
    Foo AS f 
    INNER JOIN Regexes AS re ON f.bar REGEXP re.pattern 
+0

+1을받을 것 - 재미있게, 내 버전 : –

+0

@ 팀 이상이 덜 복잡 찾을 : 음 ... 그것은 별도의 테이블을 필요로하며, 쿼리를 시작하기 전에 행을 삽입하십시오. 연결된 정규 표현식을 사용하면 정리 작업이 줄어 듭니다. – Tomalak