17

완전한 정규 표현식 기능 세트를 사용하는 효율적인 쿼리를 만들 수 있습니까?SQL Server 서버의 정규식?

Microsoft가 실제로 해당 기능을 고려해야하는 경우.

답변

4

thisthis을 확인하십시오. 그들은 그것을하는 방법에 대한 훌륭한 글입니다.

5

대답은 일반적인 경우가 아니지만 효율적이라는 말에 달려 있습니다. 이러한 목적을 위해 다음 정의를 사용합니다. '인덱스와 조인을 합리적인 순서로 효과적으로 사용합니다.'

이 경우 '효율적인'쿼리는 '인수'가 가능하므로 인덱스 검색을 사용하여 검색 조건자를 좁힐 수 있습니다. 등가성 (t-join)과 간단한 불평등이이를 가능하게합니다. 'AND'술어도이를 수행 할 수 있습니다. 그런 다음 테이블, 인덱스 및 범위 검색 (레코드 별 레코드 (또는 인덱스 키 비 인덱스 키) 비교) 작업을 수행합니다.

Sontek의 대답은 regexp 기능을 쿼리에 인라인하는 방법을 설명하지만 작업은 레코드별로 레코드를 비교해야합니다. 함수에서이 함수를 감싸면 함수의 인덱스가 계산 결과가 인덱스에서 구체화됩니다 (오라클은 이것을 지원하고 in this article과 같은 종류의 트릭을 사용하여 SQL Server에서 동일한 기능을 수행 할 수 있습니다). 그러나 임의의 정규 표현식에 대해서는이 작업을 수행 할 수 없습니다.

일반적으로 정규 표현식의 의미는 인덱스가 수행하는 방식으로 일치 집합을 제거하지 않으므로 rexegp 지원을 쿼리 최적화 프로그램에 통합하는 것은 아마도 불가능합니다.

0

는 우리가 Microsoft는이를 추가 할 경우 당신이 할 수있는 경우 SQL CLR 어셈블리

의 형태로 올 것이라고 SQL 서버 2008 (HIERARCHYID, 지리 공간)의 새로운 유형에서 볼 수 있다고 생각 Visual Studio에서 새로운 Database \ SQL Server 프로젝트를 생성하여 자신 만의 롤을 만들 수있는 데이터베이스에 어셈블리를 설치하십시오. 그러면 새로운 Trigger/UDF/Stored Proc/Aggregate 또는 UDT를 만들 수 있습니다. System.Text.RegularExpressions을 클래스로 가져 와서 거기에서 이동할 수 있습니다.

희망이

1

나는 기본적으로 임시 쿼리에 대한 SQL 서버에서 정규 표현식을 호출하고 저장 프로 시저에서 사용할 수있는 능력을 가지고 사랑을하는 데 도움이됩니다. 우리의 DBA는 CLR 함수를 만들 수 없도록하여 LINQ Pad을 임시 항목에 대한 가난한 사람의 쿼리 편집기로 사용했습니다. 특히 데이터베이스에 저장된 JSON 또는 XML과 같은 구조화 된 데이터로 작업 할 때 유용합니다.

그리고 정규 표현식 지원이 없다는 점에 동의합니다. 이는 쿼리 언어에서 명백한 기능처럼 보입니다. 바라건대 우리는 장래 버전에서 그것을 볼 것이지만 사람들은 오랜 시간 동안 그것을 요구해 왔으며 아직 제품으로 나아 가지 못했다.

필자가 보아온 가장 흔한 이유는 잘못 형성된 표현으로 인해 catastrophic backtracking이 발생하고 .NET에서는이를 중단하지 않고 거의 항상 컴퓨터를 다시 시작해야한다는 것입니다. 일단 프레임 워크에서 SQL Server의 차후 버전에 포함될 것임을 알게 될 것입니다.

+2

이것은 추측과 논평이며 대답이 아닙니다. – amoss