2011-02-06 21 views
6

Tôi tạo ra mô hình SQL regex sau cho phù hợp với ISBN: SQL Regular Expressions

CREATE RULE ISBN_Rule AS @value LIKE 'ISBN\x20(?=.{13}$)\d{1,5}([-])\d{1,7}\1\d{1,6}\1(\d|X)$' 

tôi đã sử dụng các giá trị sau khi dữ liệu thử nghiệm; tuy nhiên, dữ liệu không được cam kết:

ISBN 0 93028 923 4 | ISBN 1-56389-668-0 | ISBN 1-56389-016-X 

Tôi đang ở đâu sai?

+0

mà RDBMS? .... –

+0

Máy chủ Microsoft SQL 2005 – Sudantha

Trả lời

6

Bạn có thể thực hiện việc này bằng LIKE.

Bạn sẽ cần một số ORS để đối phó với sự khác nhau ISBN 10 và 13 định dạng

Đối với chuỗi trên:

LIKE 'ISBN [0-9][ -][0-9][0-9][0-9][0-9][0-9][ -][0-9][0-9][0-9][ -][0-9X]' 
+0

Định dạng ISBN là cách linh hoạt hơn những gì bạn có ở đây. Xem Wikipedia. Đây là hư không gần mẫu RegEx. – RichardTheKiwi

+0

Cảm ơn Điều này đã làm việc cho tôi! – Sudantha

+0

@sudantha: giải pháp của tôi chỉ giải quyết một trường hợp hẹp. Cảm ơn bạn mặc dù. – gbn

4

SQL Server 2005 không hỗ trợ biểu thức REGEX ngoài hộp, bạn sẽ cần OLE Automation hoặc CLR để cung cấp chức năng đó thông qua UDF.

Ký tự đại diện được hỗ trợ duy nhất là% (bất kỳ) và _ (một) và phạm vi ký tự (hoặc phủ định) khớp với [] tùy chọn [^]. Vì vậy, biểu thức của bạn

'ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$' 

Có nghĩa là điều gì đó rất kỳ lạ với phạm vi [-] và mọi thứ khác theo nghĩa đen.

+0

tôi đã sử dụng biểu thức regex ngoài hộp trước: -s – Sudantha

+0

@Sudantha: Không đầy đủ regex, chỉ hỗ trợ giới hạn LIKE và hỗ trợ PATINDEX. Tôi đã không downvote - đó là upvote của tôi thực sự. –

1

Nếu nó chia nhỏ | và không có dải trắng, nó có thể thiếu dấu cách trước ISBN và/hoặc sau (\ d | X) tại đây $ .. Ngoài ra, tôi nghi ngờ đây là vấn đề, nhưng [-] có thể là [-]

chỉnh sửa: ok, hãy ghi nhớ điều này khi bạn nhận được một lib/kiểm soát regex.

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