2010-11-05 62 views
6

SQL Server tương đương với biểu thức MySQL dưới đây là gì?MySQL REGEXP đến SQL Server

... WHERE somefield REGEXP '^[[:blank:]]*ASD[[:blank:]]*$|^[[:blank:]]*ASD[[:blank:]]*[[.vertical-line.]]|[[.vertical-line.]][[:blank:]]*ASD[[:blank:]]*$|[[.vertical-line.]][[:blank:]]*ASD[[:blank:]]*[[.vertical-line.]]' 
+0

Có thể trùng lặp với [Biểu thức chính quy trong máy chủ SQL Server?] (Http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers) –

+1

Tôi không đặc biệt tìm kiếm cụm từ thông dụng trong MSSQL, tôi chỉ muốn bất kỳ biểu thức tương đương nào. – akosch

+0

Kiểm tra bài đăng này: http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers Hy vọng điều này sẽ hữu ích. – Hal

Trả lời

3

Thật không may sự hỗ trợ regex trong mssql là đáng sợ, toán tử gần nhất là "thích" bỏ qua chức năng của regex một dặm. Bạn sẽ phải xem xét phá vỡ regex lên thành nhiều câu lệnh như vậy và có thể làm một số thao tác chuỗi bẩn để mô phỏng những gì bạn đang cố gắng đạt được. Ví dụ: trong khi chúng ta có thể tái tạo [[: blank:]] với [] (đọc [Space Tab]), chúng ta không thể so khớp với số không hoặc nhiều hơn, vì vậy thay vào đó chúng ta phải tách chúng ra khỏi biểu thức, nhưng điều này sẽ khớp với 'ASD' vì vậy chúng ta cần kiểm tra sự hiện diện của ASD trong chuỗi chưa sửa đổi.

Tôi nghĩ rằng sau đây sẽ thay thế regex của bạn nhưng nó đã được ném với nhau một cách nhanh chóng để kiểm tra nó một cách cẩn thận.

replace(replace(somefield,' ',''),' ','') in ('ASD','|ASD','|ASD|','ASD|') 
and 
somefield like '%ASD%' 

Một lần nữa trong câu lệnh thay thế của tôi, một khoảng trống là tab khác.