2011-01-03 1 views
5

Извините, что я новичок в работе с базами данных. Я пытаюсь выполнить запрос , который получит все символы, похожие на строку в SQL.SQL Wildcard Вопрос

Например,

Если я ищу для всех пользователей, которые начинаются с определенной строки, что-то вроде S * или Sm * что бы вернуть «Смит, вонючий, Улыбки, и т.д ...»

Я на правильном пути с этим?

Любая помощь будет оценена, и спасибо заранее!

+0

Обратите внимание, что разные версии SQL предоставляют вам различные варианты; но все они поддерживают '%'. – egrunin

ответ

6

LIKE оператор, что вы ищете, поэтому для примера вам нужно будет что-то вроде:

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

символа «%» символа диких карт в SQL.

+0

Это то, что я искал, поскольку мне просто нужно было что-то найти имена и другие поля, которые «начали с» определенной строки. Извините за мою плохую формулировку. –

3

, чтобы получить все пользователи с LastName кузнечного

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

, чтобы получить все пользователи, где фамилия содержит кузнец сделать это, что также будет возвращать blasmith, smith2 и т.д. и т.п.

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

Если вы хотите все, что начинается с кузнеца.

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

Ваш вопрос не является совершенно ясно.

Если вы хотите, чтобы все пользователи с фамилией Смит, постоянный поиск будет работать:

SELECT * FROM users WHERE last_name = 'Smith' 

Если вы хотите, чтобы все пользователи, начинающиеся с «S» и заканчивая «е», вы можете использовать LIKE и подстановочный знак:

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

(Обратите внимание на стандартный SQL-код с множеством символов «%», а не «*»).

Если вы действительно хотите совпадение «звучит», многие базы данных поддерживают один или несколько алгоритмов поиска SOUNDEX. Проверьте документацию для вашего конкретного продукта (о котором вы не упоминаете в вопросе).

0

Вам также могут понравиться результаты SOUNDEX, в зависимости от вашего предпочтения для сходства фамилий.

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

За исключением того, что soundex не очень хорош (например, наблюдается что-то вроде 60% ложной положительной скорости). Он был разработан для соответствия именам на английском языке, а не произвольным словам. Это падает на его лицо при условии произвольного текста (или текста за пределами 26 базовых букв алфавита). Вот оригинальный патент от 1917 года. http://www.google.com/patents/about?id=EbdgAAAAEBAJ&dq=1,261,167 –

+0

согласен, кроме английских фамилий именно то, о чем говорит OP ... – Randy

2

Standard (ANSI) SQL имеет два подстановочные символы для использования с LIKE ключевого слова:

  • _ (подчеркивание). Соответствует одному вхождению любого отдельного символа.
  • % (знак процента). Соответствует нулю или более вхождений любого отдельного символа.

Кроме того, SQL Server расширяет LIKE групповой символ, соответствующий для включения набора символов спецификации, а как обычный набора регулярно expresion символов спецификатора:

  • [Символьный набор] Соответствует одному символу из указанный набор
  • [^ character-set] Соответствует одному символу не в указанном наборе.

Наборы символов могут быть определены обычным способом в виде диапазона, а также:

  • [0-9] соответствует любой десятичной цифре.
  • [A-Z] соответствует любой прописной букве
  • [^ A-Z0-9-] соответствует любому символу, который не является буквой, цифрой или дефисом.

Семантика соответствия букв, конечно, зависит от последовательности сортировки при использовании. Это может быть или не быть чувствительным к регистру.

Кроме того, чтобы соответствовать литеральной левой квадратной скобке ('[]'), вы должны использовать использовать спецификатор диапазона символов. Вы не получите синтаксическую ошибку, но вы также не получите соответствия.

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

будет соответствовать текст, который выглядит как 'х [0]', 'х [8] и т.д. Но

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

всегда будет ложным.

4

Sql не может это сделать ... размещение символа процента посередине.

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

Вам нужно будет написать предложение where и предложение and.

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

 Смежные вопросы

  • Нет связанных вопросов^_^