2011-01-03 36 views
5

Xin lỗi tôi mới làm việc với cơ sở dữ liệu - Tôi đang cố gắng thực hiện truy vấn để nhận tất cả các ký tự tương tự như một chuỗi trong SQL.Câu hỏi SQL Wildcard

Ví dụ,

Nếu tôi đang tìm kiếm cho tất cả người dùng bắt đầu với một chuỗi nào đó, một cái gì đó như S * hoặc Sm * rằng sẽ quay trở lại "Smith, mùi, Smiles, vv ..."

Tôi có đi đúng hướng với điều này không?

Bất kỳ trợ giúp nào sẽ được đánh giá cao và Cảm ơn bạn trước!

+0

Lưu ý rằng các phiên bản SQL khác nhau cung cấp cho bạn các lựa chọn khác nhau; nhưng tất cả đều hỗ trợ '%'. – egrunin

Trả lời

6

Nhà điều hành LIKE là những gì bạn đang tìm kiếm, vì vậy ví dụ của bạn, bạn sẽ cần một cái gì đó như:

SELECT * 
    FROM [Users] 
WHERE LastName LIKE 'S%' 

Các '%' nhân vật là thẻ hoang dã trong SQL.

+0

Đây là những gì tôi đang tìm kiếm - vì tôi thực sự cần một cái gì đó để tìm tên và các trường khác "bắt đầu bằng" một chuỗi cụ thể. Xin lỗi vì từ ngữ nghèo nàn của tôi. –

3

để có được tất cả các người dùng với một lastname của smith

SELECT * 
    FROM [Users] 
WHERE LastName ='Smith' 

để có được tất cả người dùng nơi lastname chứa smith làm điều này, điều đó cũng sẽ trở lại blasmith, smith2 vv vv

SELECT * 
    FROM [Users] 
WHERE LastName LIKE '%Smith%' 

Nếu bạn muốn mọi thứ bắt đầu bằng smith làm điều này

SELECT * 
    FROM [Users] 
WHERE LastName LIKE 'Smith%' 
0

Câu hỏi của bạn không phải là e ntirely rõ ràng.

Nếu bạn muốn tất cả những người sử dụng với tên cuối cùng Smith, tìm kiếm thông thường sẽ làm việc:

SELECT * FROM users WHERE last_name = 'Smith' 

Nếu bạn muốn tất cả những người sử dụng bắt đầu với 'S' và kết thúc bằng 'th', bạn có thể sử dụng LIKE và ký tự đại diện:

SELECT * FROM users WHERE last_name LIKE 'S%th' 

(Lưu ý SQL nhiều ký tự đại diện '%' thay vì '*').

Nếu bạn thực sự muốn kết hợp "giống như âm thanh", nhiều cơ sở dữ liệu hỗ trợ một hoặc nhiều tìm kiếm thuật toán SOUNDEX. Kiểm tra tài liệu cho sản phẩm cụ thể của bạn (mà bạn không đề cập đến trong câu hỏi).

0

bạn cũng có thể thích kết quả của SOUNDEX, tùy thuộc vào sở thích của bạn cho sự giống nhau về tên cuối cùng.

select * 
from [users] 
where soundex('lastname') = soundex('Smith') 
or upper(lastname) like 'SM%' 
+0

Ngoại trừ soundex không phải là rất tốt (ví dụ, một cái gì đó giống như một tỷ lệ dương tính giả 60% đã được quan sát). Nó được thiết kế cho phù hợp với tên tiếng Anh, không phải từ ngữ tùy ý. Nó rơi trên khuôn mặt của nó cho văn bản tùy ý (hoặc văn bản bên ngoài 26 chữ cái cơ sở của bảng chữ cái). Đây là bằng sáng chế ban đầu từ năm 1917. http://www.google.com/patents/about?id=EbdgAAAAEBAJ&dq=1,261,167 –

+0

đã đồng ý, ngoại trừ tên cuối cùng bằng tiếng Anh chính xác là những gì OP đang nói đến ... – Randy

2

tiêu chuẩn (ANSI) SQL có hai ký tự đại diện để sử dụng với từ khóa LIKE:

  • _ (gạch dưới). Khớp với một lần xuất hiện của bất kỳ ký tự đơn nào.
  • % (ký hiệu phần trăm). Khớp không hoặc nhiều lần xuất hiện của bất kỳ ký tự đơn nào.

Bên cạnh đó, SQL Server mở rộng ký tự đại diện NHƯ phù hợp để bao gồm ký tự đặc điểm kỹ thuật, chứ không phải như một bình thường nhân vật cụm từ thông dụng bộ specifier:

  • [nhân vật-set] Matches một nhân vật duy nhất từ tập hợp được chỉ định
  • [^ bộ ký tự] So khớp một ký tự đơn không nằm trong tập hợp được chỉ định.

tập kí tự có thể được xác định theo cách thông thường như một loạt cũng như:

  • [0-9] khớp với bất kỳ chữ số thập phân.
  • [A-Z] khớp với bất kỳ chữ cái viết hoa nào
  • [^ A-Z0-9-] khớp với bất kỳ ký tự nào không phải là chữ cái, chữ số hoặc gạch nối.

Ngữ nghĩa của kết hợp chữ cái tất nhiên, phụ thuộc vào chuỗi đối chiếu đang sử dụng. Nó có thể hoặc có thể không phân biệt chữ hoa chữ thường.

Hơn nữa, để khớp với một dấu ngoặc vuông bên trái ('[]'), bạn phải sử dụng trình chỉ định phạm vi ký tự. Bạn sẽ không nhận được lỗi cú pháp, nhưng bạn cũng sẽ không nhận được một kết quả trùng khớp.

where x.field like 'x[[][0-9]]' 

sẽ phù hợp với văn bản trông giống như 'x [0]', 'x [8]', vv Nhưng

where 'abc[x' like 'abc[x' 

sẽ luôn luôn sai.

4

Sql không thể làm điều này ... đặt biểu tượng phần trăm ở giữa.

SELECT * FROM users WHERE last_name LIKE 'S%th' 

bạn cần viết mệnh đề where và điều khoản và mệnh đề.

SELECT * FROM users WHERE last_name LIKE 'S%' and last_name LIKE '%th'