2010-09-07 41 views
41

Sử dụng SQL Server 2008. Tôi có một bảng với các cột sau:SQL Server NHƯ chứa khung nhân vật

sampleData (nvarchar(max)) 

Giá trị cho cột này trong một số các hàng được danh sách định dạng như sau:

["value1","value2","value3"] 

Tôi đang cố gắng viết một truy vấn đơn giản sẽ trả về tất cả các hàng có danh sách được định dạng như thế này, bằng cách chỉ phát hiện khung mở.

SELECT * from sampleTable where sampleData like '[%' 

Các truy vấn trên không làm việc vì '[' là một nhân vật đặc biệt, và tôi không thể cho cuộc đời của tôi tìm ra cách để thoát khỏi khung để truy vấn của tôi làm những gì tôi muốn.

Cảm ơn mọi đề xuất!

Trả lời

57
... like '[[]%' 

Bạn sử dụng [ ] bao vây một nhân vật đặc biệt (hoặc nhiều)

Xem phần "Sử dụng ký tự đại diện như literals" trong SQL Server LIKE

Edit, 24 Tháng 11 2011

Lưu ý: Bạn không cần thoát khỏi khung đóng ...

23

Ngoài câu trả lời của gbn, phương pháp khác là sử dụng số ESCAPE tùy chọn:

SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\' 

Xem documentation để biết chi tiết

2

Chỉ cần một lưu ý thêm ở đây ... Nếu bạn muốn bao gồm khung (hoặc sản phẩm đặc biệt khác) trong một tập hợp các ký tự, bạn chỉ có tùy chọn sử dụng ESCAPE (vì bạn đã sử dụng các dấu ngoặc vuông để biểu thị tập hợp). Ngoài ra, bạn PHẢI chỉ định mệnh đề ESCAPE, vì không có ký tự thoát mặc định (nó không phải là dấu gạch chéo ngược theo mặc định như tôi nghĩ, đến từ nền C).

ví dụ: nếu tôi muốn kéo ra hàng nơi một cột chứa bất cứ điều gì ngoài một tập hợp các ký tự 'chấp nhận', vì lợi ích của các đối số giả chữ cái và số ... chúng ta có thể bắt đầu với

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%' 

Vì vậy, chúng tôi đang quay trở lại bất cứ điều gì này có bất kỳ ký tự nào không có trong danh sách (do ký tự dấu đầu dòng ^).

Nếu chúng ta sau đó muốn thêm ký tự đặc biệt trong bộ này của nhân vật có thể chấp nhận, chúng ta có thể không tổ khung vì vậy chúng tôi phải sử dụng một nhân vật chạy thoát, như thế này ...

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\' 

trước dấu ngoặc (cá nhân) với dấu gạch chéo ngược và cho biết rằng chúng tôi đang sử dụng dấu gạch chéo ngược cho ký tự thoát cho phép chúng tôi thoát khỏi chúng trong các dấu ngoặc hoạt động cho biết tập ký tự.

Xin lỗi vì ví dụ câm, nhưng hy vọng nó giúp ai đó

+0

Vì vậy, chúng tôi rất may mắn nếu chúng tôi đang sử dụng PATINDEX? – Sam

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