2014-12-09 11 views
-1

Я в ситуации, когда мне нужно возвращать результаты, если выполняются некоторые условия на строку/символ.Сравнение строк в SQL

Например: для возврата только имен, содержащих символ «F» из таблицы Person.

Как создать SQL-запрос на основе таких условий? Есть ли ссылка на документацию, которая объясняет, как SQL может выполнять такие запросы?

Заранее спасибо

+1

Это может зависеть от движка базы данных, которую вы используете. Для большинства реализаций я рекомендую вам изучить ключевое слово LIKE. –

+0

@GMastros, спасибо, это он. –

ответ

1

Большинство РСУБД предлагают строковые операции, которые способны выполнять требуемую задачу так или иначе.

В MySQL можно использовать INSTR:

SELECT * 
FROM yourtable 
WHERE INSTR(Person, 'F') > 0; 

В Oracle, this can be done тоже.

В PostgreSQL, вы можете использовать STRPOS:

SELECT * 
FROM yourtable 
WHERE strpos(Person, 'F') > 0; 

Обычно существует несколько подходов для решения этой проблемы, многие выбрали бы оператор LIKE. Для получения дополнительной информации обратитесь к документации по РСУБД по вашему выбору.

Update

В соответствии с просьбой спрашивающего несколько слов о LIKE оператора, которые используются не только в MySQL или Oracle, но и в других СУБД, тоже.

Использование LIKE в некоторых случаях заставит вашу СУБД попытаться использовать индекс, обычно не пытается это сделать, если вы используете строковые функции.

Пример:

SELECT * 
FROM yourtable 
WHERE Person LIKE 'F%'; 
+0

Я проверил для Oracle и MySQL, и оба они имеют SQL LIKE. Не могли бы вы рассказать нам об этом (как о редактировании). Еще раз спасибо. (PS: Я не разрабатываю какое-либо решение, это вопрос в соглашениях, где RDBMS не указывается) –

+1

Я добавил несколько слов относительно оператора 'LIKE'. – Bjoern

1

Запрос может выглядеть следующим образом:

SELECT * FROM Person WHERE FirstName LIKE '%F%' OR LastName LIKE '%F%' 
2

Самый простой подход заключается в использовании LIKE оператора:

-- name starts with 'F' 
SELECT * FROM person WHERE name LIKE 'F%' 

-- name contains 'F' 
SELECT * FROM person WHERE name LIKE '%F%' 

(% является подстановочные)

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