Trả lời

14

Đối với SQL Server 2000 (và bất kỳ phiên bản 32 bit khác của SQL Server), có xp_pcre, giới thiệu các biểu thức chính quy tương thích Perl như một tập hợp các thủ tục được lưu trữ mở rộng. Tôi đã sử dụng nó, nó hoạt động.

Phiên bản mới hơn cung cấp cho bạn quyền truy cập trực tiếp vào .NET integrated regular expressions (liên kết này có vẻ đã chết, đây là một liên kết khác: MSDN: How to: Work with CLR Database Objects).

4

Khám phá thisthis. Họ là những bài viết tuyệt vời về cách làm điều đó.

5

Câu trả lời là không, không phải trong trường hợp chung, mặc dù câu trả lời có thể phụ thuộc vào ý bạn là hiệu quả. Đối với những mục đích này, tôi sẽ sử dụng định nghĩa sau: 'Sử dụng hiệu quả các chỉ mục và tham gia theo thứ tự hợp lý' có thể tốt như bất kỳ thứ tự nào.

Trong trường hợp này, các truy vấn 'hiệu quả' là 'có thể', có nghĩa là họ có thể sử dụng tra cứu chỉ mục để thu hẹp các vị từ tìm kiếm. Equalities (t-join) và bất bình đẳng đơn giản có thể làm điều này. Các vị từ 'AND' cũng có thể làm điều này. Sau đó, chúng tôi nhận được vào bảng, chỉ mục và phạm vi quét - tức là các hoạt động phải thực hiện so sánh bản ghi theo bản ghi (hoặc chỉ mục-khóa-chỉ mục-khóa).

Câu trả lời của Sontek mô tả phương pháp chức năng regexp trong lớp vào truy vấn, nhưng các hoạt động vẫn phải so sánh trên hồ sơ theo cơ sở ghi. Việc gói nó lên trong một hàm sẽ cho phép một chỉ mục dựa trên hàm mà kết quả của phép tính được thực hiện trong chỉ mục (Oracle hỗ trợ điều này và bạn có thể nhận được chức năng tương đương trong SQL Server bằng cách sử dụng các thủ thuật được thảo luận in this article). Tuy nhiên, bạn không thể làm điều này cho một regexp tùy ý.

Trong trường hợp chung, ngữ nghĩa của cụm từ thông dụng không cho phép cắt tỉa các bộ so khớp theo cách mà chỉ mục thực hiện, vì vậy việc tích hợp hỗ trợ rexegp vào trình tối ưu hóa truy vấn có thể không thực hiện được.

0

Tôi nghĩ rằng chúng ta có thể nhìn thấy từ các loại mới trong SQL Server 2008 (HierarchyId, không gian địa lý) rằng nếu Microsoft làm thêm này nó sẽ đến dưới hình thức của một SQL CLR hội

Nếu bạn có thể cài đặt Assemblies vào cơ sở dữ liệu của bạn, bạn có thể cuộn của riêng bạn bằng cách tạo một dự án Database \ SQL Server mới trong Visual Studio - điều này sẽ cho phép bạn tạo một Trigger/UDF/Stored Proc/Aggregate hoặc UDT mới. Bạn có thể nhập System.Text.RegularExpressions vào lớp và đi từ đó.

Hope this helps

1

tôi rất thích có khả năng tự nhiên gọi biểu thức thông thường trong SQL Server cho quảng cáo hoc truy vấn và sử dụng trong thủ tục lưu trữ. DBA của chúng tôi sẽ không cho phép chúng tôi tạo các hàm CLR vì vậy tôi đã sử dụng LINQ Pad làm trình soạn thảo truy vấn của người nghèo cho các công cụ quảng cáo. Nó đặc biệt hữu ích khi làm việc với dữ liệu có cấu trúc như JSON hoặc XML đã được lưu vào cơ sở dữ liệu.

Và tôi đồng ý rằng nó có vẻ như một sự giám sát mà không có hỗ trợ biểu thức chính quy, nó có vẻ giống như một tính năng rõ ràng cho một ngôn ngữ truy vấn. Hy vọng rằng chúng ta sẽ thấy nó trong một phiên bản tương lai nhưng mọi người đã yêu cầu nó trong một thời gian dài và nó đã không làm cho nó là cách vào sản phẩm nào được nêu ra.

Lý do thường gặp nhất mà tôi gặp phải là biểu thức kém được tạo thành có thể gây ra catastrophic backtracking trong .NET sẽ không hủy và hầu như luôn yêu cầu khởi động lại máy. Có lẽ một khi họ giải quyết điều đó trong khung công tác, chúng ta sẽ thấy nó có trong một phiên bản tương lai của SQL Server.

+2

Đây là suy đoán và bình luận chứ không phải là câu trả lời. – amoss

Các vấn đề liên quan