- •Оглавление Извлечение данных. Оператор select
- •Оператор select
- •Предикаты (часть I)
- •Предикаты сравнения
- •Предикат between
- •Предикат in
- •Переименование столбцов и вычисления в результирующем наборе
- •Предикаты (часть 2) Предикат like
- •Использование значения null в условиях поиска Предикат is [not] null
- •Получение итоговых значений
- •Предложение group by
- •Предложение having
- •Использование в запросе нескольких источников записей
- •Явные операции соединения
- •Традиционные операции над множествами и оператор select
- •Декартово произведение
- •Объединение
- •Пересечение и разность
- •Предикат exists
- •Использование ключевых слов some | any и all с предикатами сравнения
- •Еще о подзапросах
- •Преобразование типов
- •Оператор case
- •Функции Transact-sql для обработки даты/времени
- •Функция dateadd
- •Функция datediff
- •Функция datepart
- •Функция datename
- •Функции работы со строками в ms sql server 2005
- •Функция substring
- •Функция reverse
- •Функция replace
- •Функции ltrim и rtrim
- •Функции lower и upper
- •Функция unicode
- •Функция nchar
- •Операторы модификации данных
- •Оператор insert
- •Вставка строк в таблицу, содержащую автоинкрементируемое поле
- •Оператор update
- •Оператор delete
- •Приложение 1. Описание учебных баз данных
- •1. Компьютерная фирма
- •2. Фирма вторсырья
- •3. Корабли
- •4. Аэрофлот
- •5. Окраска
- •Приложение 2. Список упражнений (select)
- •Как объединить данные из двух столбцов в один без использования union и join?
- •1. Union all
- •2. Full join
- •3. Unpivot
- •Комментарии
- •Как добавить новый столбец в таблицу между существующими столбцами?
- •Как вывести по n строк из каждой группы?
- •"Классическое" решение
- •1. Соединение
- •2. Подзапрос в предложении select
- •Решение на основе ранжирующих функций
- •Как удалить дубликаты строк из таблицы?
- •1. Нумерация строк
- •2. Ранжирование строк внутри групп дубликатов
- •3. Удаление дубликатов из виртуальной таблицы
- •Как удалить дубликаты строк при наличии первичного ключа?
- •Id name
- •Id_pk color
- •Id name color
- •Обновление таблицы t_details
- •Id_pk name color dup min_id
- •Id_pk color
- •Id name
- •Id_pk color
Предикаты (часть 2) Предикат like
Синтаксис LIKE::= <Выражение для вычисления значения строки> [NOT] LIKE <Выражение для вычисления значения строки> [ESCAPE <символ>] Предикат LIKE сравнивает строку, указанную в первом выражении для вычисления значения строки, называемого проверяемым значением, с шаблоном, который определен во втором выражении для вычисления значения строки. В образце разрешается использовать два трафаретных символа:
Символ подчеркивания (_), который можно использовать вместо любого единичного символа в проверяемом значении.
Символ процента (%), который заменяет набор любых символов (число символов в наборе может быть от 0 и более) в проверяемом значении.
Если проверяемое значение соответствует образцу с учетом трафаретных символов, то значение предиката равно TRUE. Ниже приводится несколько примеров написания шаблонов.
Шаблон |
Описание |
'abc%' |
Любые строки, которые начинаются с букв "abc". |
'abc_' |
Строки длиной строго 4 символа, причем первыми символами строки должны быть "abc". |
'%z' |
Любая последовательность символов, которая обязательно заканчивается символом "z". |
'%Rostov%' |
Любая последовательность символов, содержащая слово "Rostov" в любом месте строки. |
Пример. Найти все корабли, имена классов которых заканчиваются на букву 'о':
SELECT * FROM Ships WHERE class LIKE '%o'; |
Результатом выполнения запроса будет следующая таблица:
name |
class |
launched |
Haruna |
Kongo |
1916 |
Hiei |
Kongo |
1914 |
Kirishima |
Kongo |
1915 |
Kongo |
Kongo |
1913 |
Musashi |
Yamato |
1942 |
Yamato |
Yamato |
1941 |
Пример. Найти все корабли, имена классов которых заканчиваются на букву 'о', но не на 'go':
SELECT * FROM Ships WHERE class NOT LIKE '%go' AND class LIKE '%o'; |
name |
class |
launched |
Musashi |
Yamato |
1942 |
Yamato |
Yamato |
1941 |
Если искомая строка содержит трафаретный символ, то следует задать управляющий символ в предложении ESCAPE. Этот управляющий символ должен использоваться в шаблоне перед трафаретным символом, сообщая о том, что трафаретный символ следует трактовать как обычный символ. Например, если в некотором поле следует отыскать все значения, содержащие символ "_", то шаблон '%_%' приведет к тому, что будут возвращены все записи из таблицы. В данном случае шаблон следует записать следующим образом:
'%#_%' ESCAPE '#'
Для проверки значения на соответствие строке "25%" можно воспользоваться таким предикатом:
LIKE '25|%' ESCAPE '|'
Истинностное значение предиката LIKE присваивается в соответствии со следующими правилами:
Если либо проверяемое значение, либо образец, либо управляющий символ равен NULL, истинностное значение равно UNKNOWN.
В противном случае, если проверяемое значение и образец имеют нулевую длину, истинностное значение равно TRUE.
В противном случае, если проверяемое значение соответствует шаблону, то предикат LIKE равен TRUE.
Если не соблюдается ни одно из перечисленных выше условий, предикат LIKE равен FALSE.