Предикат sql like для поиска строки с заданными символами
Содержание:
- Решения
- SQL References
- Пример — использование оператора NOT с условием LIKE
- SQL Учебник
- Пример — использование escape-символов с условием LIKE
- Псевдонимы для столбцов
- КомментарииRemarks
- Операторы сравнения SQLite
- Примеры: Azure Synapse AnalyticsAzure Synapse Analytics и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Параллельное хранилище данныхParallel Data Warehouse
- Пример использования ESCAPE
- Example — Using the NOT Operator with the LIKE Condition
- Сеть видеокамер в Стамбуле распознаёт 15 000 лиц в секунду
- Пример использования _ (символ подчеркивание)
- Использование символов-шаблонов в качестве литераловUsing Wildcard Characters As Literals
- Применение предиката LIKE с простыми условиями
- Пример — использование подстановочного символа % (символ знак процента)
- Пример использования подстановочного символа _ (подстановочный символ подчеркивания)
- SQL Справочник
- Example — Using _ Wildcard in the LIKE Condition
- КомментарииRemarks
- SQL ANY и ALL
- Итог
Решения
MySQL
MySQL функция IFNULL() позволяет возвращать альтернативное значение, если выражение равно нулю:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
или мы можем использовать функцию COALESCE(), например:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
SQL Server
SQL Server функция ISNULL() позволяет возвращать альтернативное значение, если выражение равно нулю:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products;
MS Access
MS Access функция IsNull() возвращает TRUE (-1), если выражение имеет нулевое значение, в противном случае FALSE (0):
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products;
Oracle
Oracle функция NVL() достигает того же результата:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products;
SQL References
SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL Quick Ref
Пример — использование оператора NOT с условием LIKE
Далее давайте рассмотрим пример использования оператора NOT с условием LIKE. В этом примере у нас есть таблица suppliers со следующими данными:
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Yandex | Moscow | Russian |
200 | Lansing | Michigan | |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
500 | Yahoo | Sunnyvale | Washington |
600 | DuckDuckGo | Paoli | Pennsylvania |
700 | Qwant | Paris | France |
800 | Menlo Park | California | |
900 | Electronic Arts | San Francisco | California |
Давайте посмотрим на все записи в таблице suppliers, где supplier_name не содержит литеру ‘o’. Введите следующий SQL оператор.
PgSQL
SELECT *
FROM suppliers
WHERE supplier_name NOT LIKE ‘%o%’;
1 2 3 |
SELECT* FROMsuppliers WHEREsupplier_nameNOTLIKE’%o%’; |
Будут выбраны 4 записи. Вот результаты, которые вы должны получить.
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Yandex | Moscow | Russian |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
700 | Qwant | Paris | France |
В этом примере в таблице suppliers есть четыре записи, в которых supplier_name не содержит литеру ‘o’.
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Пример — использование escape-символов с условием LIKE
Важно понимать, как использовать «escape-символ» когда он соответствует шаблону. Вы можете экранировать или и искать литеральные версии
Допустим, вы хотели найти как литерал в условии LIKE. Вы можете сделать это с помощью escape-символа. В нашем примере мы будем использовать как escape-символ в условии LIKE.NOTE: Вы можете определить только escape-символ как один символ. Лучше всего выбрать такой символ, который не будет появляться в ваших данных очень часто, например или же . В этом примере мы имеем таблицу test со следующими данными:
test_id | test_value |
---|---|
1 | 10% |
2 | 25% |
3 | 100 |
4 | 99 |
Мы могли бы вернуть все записи из таблицы test, где test_value содержит литерал . Введите следующий SQL оператор.
PgSQL
SELECT *
FROM test
WHERE test_value LIKE ‘%!%%’ escape ‘!’;
1 2 3 |
SELECT* FROMtest WHEREtest_valueLIKE’%!%%’escape’!’; |
Вот результаты, которые вы должны получить.
test_id | test_value |
---|---|
1 | 10% |
2 | 25% |
В этом примере символ определяется как escape-символ. Первое и последнее значения в условии LIKE рассматриваются как обычные подстановочные символы. является экранированным , поэтому он рассматривается как литеральное значение . Вы можете дополнительно изменить приведенный выше пример и возвращать только те test_values, которые начинаются с 1 и содержат литерал %. Введите следующий SQL оператор:
PgSQL
SELECT *
FROM test
WHERE test_value LIKE ‘1%!%%’ escape ‘!’;
1 2 3 |
SELECT* FROMtest WHEREtest_valueLIKE’1%!%%’escape’!’; |
Вот результаты, которые вы должны получить.
test_id | test_value |
---|---|
1 | 10% |
Этот пример, на этот раз, вернет только одну запись. Потому что есть только один test_value, который начинается на 1 и содержит литерал .
Псевдонимы для столбцов
Следующий оператор SQL создает два псевдонима, один для столбца CustomerID и CustomerName:
Пример
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
Следующая инструкция SQL создает два псевдонима.
Обратите внимание, что он требует двойных кавычек или квадратных скобок, если имя псевдонима содержит пробелы:
Пример
SELECT CustomerName AS Customer, ContactName AS
FROM Customers;
Следующий оператор SQL создает псевдоним «Адрес», которые объединяют четыре столбца (адрес, почтовый индекс, города и страны):
Пример
SELECT CustomerName, Address + ‘, ‘ + PostalCode + ‘ ‘ + City + ‘, ‘ + Country
AS Address
FROM Customers;
Примечание: Чтобы получить инструкцию SQL, чтобы работать в MySQL использовать следующие:
SELECT CustomerName, CONCAT(Address,’, ‘,PostalCode,’, ‘,City,’, ‘,Country) AS Address
FROM Customers;
КомментарииRemarks
При использовании оператора LIKE для сравнения строк во внимание принимаются все символы строки-шаблона.When you do string comparisons by using LIKE, all characters in the pattern string are significant. К значимым символам также относятся начальные и конечные пробелы.Significant characters include any leading or trailing spaces
Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв ‘ (с символом пробела на конце), то строка, содержащая «абв» (без пробела), не будет возвращена.If a comparison in a query is to return all rows with a string LIKE ‘abc ‘ (abc followed by a single space), a row in which the value of that column is abc (abc without a space) isn’t returned. Однако завершающие пробелы в выражении, с которым сравнивается шаблон, не учитываются.However, trailing blanks, in the expression to which the pattern is matched, are ignored. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв’ (без знака пробела на конце), то будут возвращены все строки, содержащие «абв», как с завершающими пробелами, так и без них.If a comparison in a query is to return all rows with the string LIKE ‘abc’ (abc without a space), all rows that start with abc and have zero or more trailing blanks are returned.
При сравнении строк с помощью оператора LIKE с использованием шаблона, содержащего тип данных char и varchar, могут возникнуть проблемы из-за методов хранения каждого типа данных.A string comparison using a pattern that contains char and varchar data may not pass a LIKE comparison because of how the data is stored for each data type. В ходе выполнения следующего примера локальная переменная char передается хранимой процедуре, а затем с помощью сравнения с шаблоном выполняется поиск всех сотрудников, чьи фамилии начинаются с указанной последовательности букв.The following example passes a local char variable to a stored procedure and then uses pattern matching to find all employees whose last names start with the specified set of characters.
Выполнение процедуры не дает результатов, так как переменная типа char () всегда имеет длину в 20 символов, до которой дополняется завершающими знаками пробела.In the procedure, no rows are returned because the char variable () contains trailing blanks whenever the name contains fewer than 20 characters. Переменные, содержащиеся в столбце , имеют тип varchar. Поэтому завершающие пробелы в них не дописываются.Because the column is varchar, there are no trailing blanks. Данная процедура завершается неудачей, так как завершающие пробелы учитываются.This procedure fails because the trailing blanks are significant.
Процедура из следующего примера выполняется успешно, так как завершающие пробелы к переменной типа varchar не добавляются.However, the following example succeeds because trailing blanks aren’t added to a varchar variable.
Результирующий набор:Here is the result set.
Операторы сравнения SQLite
Предположим, что переменная a имеет значение 10, а переменная b — 20, то операторы сравнения SQLite будут использоваться следующим образом:
Оператор | Описание | Пример |
---|---|---|
== | Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. | (a == b) не соответствует действительности. |
знак равно | Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. | (a = b) неверно. |
знак равно | Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. | (a! = b) истинно. |
<> | Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. | (a <> b) верно. |
> | Проверяет, превышает ли значения левого операнда значение правого операнда, если да, то условие становится истинным. | (a> b) неверно. |
< | Проверяет, являются ли значения левого операнда меньше значения правильного операнда, если да, то условие становится истинным. | (a <b) истинно. |
> = | Проверяет, является ли значение левого операнда больше или равно значению правильного операнда, если да, тогда условие становится истинным. | (a> = b) неверно. |
<= | Проверяет, является ли значение левого операнда меньше или равно значению правильного операнда, если да, тогда условие становится истинным. | (a <= b) истинно. |
<! | Проверяет, не превышает ли значение левого операнда значение правого операнда, если да, то условие становится истинным. | (a! <b) является ложным. |
!> | Проверяет, не превышает ли значение левого операнда значение правого операнда, если да, то условие становится истинным. | (a!> b) истинно. |
Примеры: Azure Synapse AnalyticsAzure Synapse Analytics и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Параллельное хранилище данныхParallel Data Warehouse
Д.E. Применение оператора LIKE с символом-шаблоном %Using LIKE with the % wildcard character
В следующем примере в таблице выполняется поиск всех сотрудников, телефонные номера которых начинаются с .The following example finds all employees in the table with telephone numbers that start with .
Ж.G. Применение оператора LIKE с символом-шаблоном _Using LIKE with the _ wildcard character
В следующем примере в таблице выполняется поиск всех телефонных номеров, начинающихся с и заканчивающихся на .The following example finds all telephone numbers that have an area code starting with and ending in in the table. Подстановочный знак «%» добавлен в конце шаблона поиска, что соответствует любым следующим символам в значениях столбца с телефонными номерами.The % wildcard character is included at the end of the search pattern to match all following characters in the phone column value.
Пример использования ESCAPE
Важно понять, каким образом действует escape_character при совпадении с шаблоном. Эти примеры относятся конкретно к пропуску символов в Oracle
Допустим, вы хотите найти % или _ (символ процента или подчеркивания) в операторе LIKE. Вы можете сделать это с помощью ESCAPE символов.
Обратите внимание, что вы можете определить escape_character (экранирующий символ), как один символ (длина 1). Например:
Например:
Oracle PL/SQL
SELECT *
FROM suppliers
WHERE supplier_name LIKE ‘Water!%’ ESCAPE ‘!’;
1 2 3 |
SELECT* FROMsuppliers WHEREsupplier_nameLIKE’Water!%’ESCAPE’!’; |
Этот пример LIKE идентифицирует символ ! как экранирующий символ. Этот запрос вернет всех suppliers, чье supplier_name имеют значение ‘Water%’.
Example — Using the NOT Operator with the LIKE Condition
Next, let’s look at an example of how to use the NOT Operator with the LIKE condition.
In this example, we have a table called suppliers with the following data:
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Microsoft | Redmond | Washington |
200 | Mountain View | California | |
300 | Oracle | Redwood City | California |
400 | Kimberly-Clark | Irving | Texas |
500 | Tyson Foods | Springdale | Arkansas |
600 | SC Johnson | Racine | Wisconsin |
700 | Dole Food Company | Westlake Village | California |
800 | Flowers Foods | Thomasville | Georgia |
900 | Electronic Arts | Redwood City | California |
Let’s look for all records in the suppliers table where the supplier_name does not contain the letter ‘o’. Enter the following SQL statement:
Try It
SELECT * FROM suppliers WHERE supplier_name NOT LIKE '%o%';
There will be 1 record selected. These are the results that you should see:
supplier_id | supplier_name | city | state |
---|---|---|---|
400 | Kimberly-Clark | Irving | Texas |
Сеть видеокамер в Стамбуле распознаёт 15 000 лиц в секунду
Пример использования _ (символ подчеркивание)
Далее, давайте рассмотрим, как подстановочный символ _ (символ подчеркивания) работает в Oracle операторе LIKE. Помните, что _ ищет только один символ.
Например:
Oracle PL/SQL
SELECT supplier_name
FROM suppliers
WHERE supplier_name LIKE ‘Sm_th’;
1 2 3 |
SELECTsupplier_name FROMsuppliers WHEREsupplier_nameLIKE’Sm_th’; |
В этом примере Oracle LIKE вернет всех suppliers, чье supplier_name имеет длину 5 символов, где первые два символа является ‘Sm’, а последние два символа это ‘th’. Например, он может вернуть suppliers, чьи supplier_name являются ‘Smith’, ‘Smyth’, ‘Smath’ или ‘Smeth’ и т.д.
Вот еще один пример:
Oracle PL/SQL
SELECT *
FROM suppliers
WHERE account_number LIKE ‘92314_’;
1 2 3 |
SELECT* FROMsuppliers WHEREaccount_numberLIKE’92314_’; |
Ища номер счета, вы можете обнаружить, что у вас есть только 5 из 6 цифр. В приведенном выше примере, будет возвращено потенциально 10 последних записей (где отсутствующее значение может быть от 0 до 9). Например, запрос может вернуть suppliers, чьи account_number являются:
923140, 923141, 923142, 923143, 923144, 923145, 923146, 923147, 923148, 923149
Использование символов-шаблонов в качестве литераловUsing Wildcard Characters As Literals
Символы-шаблоны могут быть использованы в качестве литералов.You can use the wildcard pattern matching characters as literal characters. Чтобы использовать символ-шаблон в качестве литерала, его необходимо заключать в скобки.To use a wildcard character as a literal character, enclose the wildcard character in brackets. В следующей таблице представлены несколько примеров применения ключевого слова LIKE вместе с символами-шаблонами .The following table shows several examples of using the LIKE keyword and the wildcard characters.
СимволSymbol | ЗначениеMeaning |
---|---|
LIKE ‘5’LIKE ‘5’ | 5 %5% |
LIKE ‘[]n’LIKE ‘[]n’ | _n_n |
LIKE »LIKE » | a, b, c, d или fa, b, c, d, or f |
LIKE »LIKE » | -, a, b, c, d или f-, a, c, d, or f |
LIKE »LIKE » | |
LIKE ‘]’LIKE ‘]’ | |
LIKE ‘abc[]d%’LIKE ‘abc[]d%’ | abc_d и abc_deabc_d and abc_de |
LIKE ‘abc’LIKE ‘abc’ | abcd, abce и abcfabcd, abce, and abcf |
Применение предиката LIKE с простыми условиями
Часто с помощью предиката SQL LIKE найти нужную строку в текстовых значениях таблицы проще, чем с помощью оператора
равенства (=). Предикат LIKE используется в секции WHERE. После предиката прописывается выражение, содержащее
символы алфавита, а также специальные символы — знак процента (%) и подчёркивание (_).
- Символ % соответствует любому количеству любых символов, а также их отсутствую.
- Символ _ соответствует ровно одному любому символу.
Приведём виды наиболее распространённых выражений, которые используются с предикатом LIKE для поиска подстроки.
- ‘xyz%’ — любые строки, которые начинаются с букв xyz;
- ‘xyz_’ — строка длиной в определённое количество символов, которая обязательно начинается с указанных букв;
- ‘%z’ — любая последовательность символов, которая заканчивается символом z;
- ‘%Word%’ — любая последовательность символов, содержащая слово ‘Word’ в любой позиции строки;
- ‘% % %’ — строка, содержащая не менее двух пробелов.
Следует обратить внимание, что в этих выражениях Word — не то же самое, что word, так как регистр
символов имеет значение. В целом же синтаксис запросов с предикатом LIKE следующий:. SELECT СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ
WHERE ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ
SELECT СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ
WHERE ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ
В примерах будем работать с базой данных «Театр». Таблица Play содержит данные о постановках. Таблица Team —
о ролях актёров. Таблица Actor — об актёрах. Таблица Director — о режиссёрах. Поля таблиц, первичные
и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши). Данные будем
извлекать из одной таблицы — Play.
Пример 1. Вывести спектакли, названия которых начинаются со
слова ‘King’.
Пишем запрос в котором с предикатом LIKE используем выражение ‘King%’:
SELECT Name FROM Play
WHERE Name LIKE ‘King%’
В результате выполнения запроса будет выведена таблица с одной строкой:
King Lear |
Пример 2. Вывести спектакли, названия которых начинаются с
буквы ‘O’ и содержат 7 символов.
Пишем запрос в котором с предикатом LIKE используем выражение ‘O______’ (подчёркивание
проставлено 6 раз):
SELECT Name FROM Play
WHERE Name LIKE ‘O______’
В результате выполнения запроса будет выведена таблица с одной строкой:
Othello |
Пример 3. Вывести спектакли, названия которых заканчиваются
буквой ‘a’.
Пишем запрос в котором с предикатом LIKE используем выражение ‘%a’ (подчёркивание
проставлено 6 раз):
SELECT Name FROM Play
WHERE Name LIKE ‘%a’
В результате выполнения запроса будет выведена таблица со следующими строками:
Matilda |
Antony and Cleopatra |
Можно увидеть и запрос, в котором вводится дополнительное условие: название
должно заканчиваться на ‘a’, но не на ‘ra’.
Пример 4. Вывести спектакли, в названии которых содержится слово
«War», например, такие как «The War That Never Ends», «The Wars of the Roses», но не «Howards End».
Пишем запрос в котором с предикатом LIKE используем выражение ‘%War%’:
SELECT Name FROM Play
WHERE Name LIKE ‘%War%’
В результате выполнения запроса будет выведена таблица:
The Wars of the Roses |
The War That Never Ends |
Можно увидеть и запрос, в котором
вводится дополнительное условие: название должно содержать «War», но
не ‘Wars’.
Пример 5. Вывести спектакли, в названиях которых содержится
не менее пяти пробелов.
Пишем запрос в котором с предикатом LIKE используем выражение ‘% % % % % %’:
SELECT Name FROM Play
WHERE Name LIKE ‘% % % % % %’
В результате выполнения запроса будет выведена таблица:
Jeeves and Wooster in Perfect Nonsense |
All s Well That Ends Well |
Morte d Arthur — Sir Thomas Malory |
Можно увидеть и запрос, в котором
есть составное условие: название должно начинаться с «M» и содеражать тире (» — «).
Поделиться с друзьями
Пример — использование подстановочного символа % (символ знак процента)
Первый пример PostgreSQL LIKE, который мы рассмотрим, включает использование подстановочного символа % (символ знак процента). Давайте разберем, как подстановочный символ % работает в PostgreSQL условии LIKE. Мы хотим найти всех employees, last_name начинается с ‘Jo’.
PgSQL
SELECT *
FROM employees
WHERE first_name LIKE ‘Jo%’;
1 2 3 |
SELECT* FROMemployees WHEREfirst_nameLIKE’Jo%’; |
Вы также можете использовать подстановочный символ % несколько раз в одной строке. Например,
PgSQL
SELECT *
FROM employees
WHERE first_name LIKE ‘%od%’;
1 2 3 |
SELECT* FROMemployees WHEREfirst_nameLIKE’%od%’; |
В этом PostgreSQL примере условия LIKE мы ищем всех employees, чье first_name содержит символы ‘od’.
Пример использования подстановочного символа _ (подстановочный символ подчеркивания)
Рассмотрим, как знак _ (подстановочный символ подчеркивания) работает в MySQL условии LIKE. Помните, что подстановочный символ _ означает только один символ. Например:
MySQL
SELECT supplier_name
FROM suppliers
WHERE supplier_name LIKE ‘Ber_ard’;
1 2 3 |
SELECTsupplier_name FROMsuppliers WHEREsupplier_nameLIKE’Ber_ard’; |
Этот пример MySQL условия LIKE возвращает всех suppliers, supplier_name которых составляет 7 символов, причем первые три символа — «Ber», а последние три символа — «ard». Например, он может вернуть всех, supplier_name которых — ‘Bernard’, ‘Berzard’, ‘Bermard’, ‘Bersard’ и т.д.
И еще один пример:
MySQL
SELECT *
FROM suppliers
WHERE account_number LIKE ‘12345_’;
1 2 3 |
SELECT* FROMsuppliers WHEREaccount_numberLIKE’12345_’; |
Вам может понадобиться найти номер учетной записи, но у вас есть только 5 из 6 цифр. В приведенном выше примере будет извлечено потенциально 10 записей (где отсутствующее значение могло бы равняться чему угодно от 0 до 9). Например, запрос может вернуть suppliers, чьи номера учетной записи: 123450, 123451, 123452, 123453, 123454, 123455, 123456, 123457, 123458, 123459
SQL Справочник
SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
Example — Using _ Wildcard in the LIKE Condition
Next, let’s explain how the wildcard (underscore wildcard) works in the LIKE condition. Remember that wildcard is looking for exactly one character, unlike the wildcard.
Using the categories table with the following data:
category_id | category_name |
---|---|
25 | Deli |
50 | Produce |
75 | Bakery |
100 | General Merchandise |
125 | Technology |
Let’s try to find all records from the categories table where the category_id is 2-digits long and ends with ‘5’. Enter the following SQL statement:
Try It
SELECT * FROM categories WHERE category_id LIKE '_5';
There will be 2 records selected. These are the results that you should see:
category_id | category_name |
---|---|
25 | Deli |
75 | Bakery |
In this example, there are 2 records that will pattern match — the category_id values 25 and 75. Notice that the category_id of 125 was not selected because, the wilcard matches only on a single character.
Using Multiple Wildcards in the LIKE Condition
If you wanted to match on a 3-digit value that ended with ‘5’, you would need to use the wildcard two times. You could modify your query as follows:
Try It
SELECT * FROM categories WHERE category_id LIKE '__5';
Now you will return the category_id value of 125:
КомментарииRemarks
При использовании оператора LIKE для сравнения строк во внимание принимаются все символы строки-шаблона.When you do string comparisons by using LIKE, all characters in the pattern string are significant. К значимым символам также относятся начальные и конечные пробелы.Significant characters include any leading or trailing spaces
Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв ‘ (с символом пробела на конце), то строка, содержащая «абв» (без пробела), не будет возвращена.If a comparison in a query is to return all rows with a string LIKE ‘abc ‘ (abc followed by a single space), a row in which the value of that column is abc (abc without a space) isn’t returned. Однако завершающие пробелы в выражении, с которым сравнивается шаблон, не учитываются.However, trailing blanks, in the expression to which the pattern is matched, are ignored. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв’ (без знака пробела на конце), то будут возвращены все строки, содержащие «абв», как с завершающими пробелами, так и без них.If a comparison in a query is to return all rows with the string LIKE ‘abc’ (abc without a space), all rows that start with abc and have zero or more trailing blanks are returned.
При сравнении строк с помощью оператора LIKE с использованием шаблона, содержащего тип данных char и varchar, могут возникнуть проблемы из-за методов хранения каждого типа данных.A string comparison using a pattern that contains char and varchar data may not pass a LIKE comparison because of how the data is stored for each data type. В ходе выполнения следующего примера локальная переменная char передается хранимой процедуре, а затем с помощью сравнения с шаблоном выполняется поиск всех сотрудников, чьи фамилии начинаются с указанной последовательности букв.The following example passes a local char variable to a stored procedure and then uses pattern matching to find all employees whose last names start with the specified set of characters.
Выполнение процедуры не дает результатов, так как переменная типа char () всегда имеет длину в 20 символов, до которой дополняется завершающими знаками пробела.In the procedure, no rows are returned because the char variable () contains trailing blanks whenever the name contains fewer than 20 characters. Переменные, содержащиеся в столбце , имеют тип varchar. Поэтому завершающие пробелы в них не дописываются.Because the column is varchar, there are no trailing blanks. Данная процедура завершается неудачей, так как завершающие пробелы учитываются.This procedure fails because the trailing blanks are significant.
Процедура из следующего примера выполняется успешно, так как завершающие пробелы к переменной типа varchar не добавляются.However, the following example succeeds because trailing blanks aren’t added to a varchar variable.
Результирующий набор:Here is the result set.
SQL ANY и ALL
Операторы ANY и ALL используются с предложением WHERE или HAVING.
Оператор ANY возвращает true, если какое-либо из значений подзапроса удовлетворяет условию.
Оператор ALL возвращает true, если все значения подзапроса удовлетворяют условию.
Синтаксис ANY
SELECT column_name(s)
FROM table_name
WHERE
column_name operator ANY(SELECT column_name FROM table_name WHERE
condition);
Синтаксис ALL
SELECT column_name(s)
FROM table_namecolumn_name operator ALL(SELECT column_name FROM table_name WHERE condition);
Примечание: Оператор должен быть стандартным оператором сравнения (=, <>, !=, >, >=, <, or <=).
Итог
Если не можете выслать сообщение, то стоит проверить различные версии, описанные в нашей статье. В большинстве случаев удается обнаружить причину и оперативно устранить ее.
Так и не смогли выявить проблему? С большой вероятностью это серверный сбой. Попробуйте повторить действия через 10-30 минут. Если ошибка остается, то свяжитесь со службой поддержки. Специалисты рассмотрят обращение и предоставят квалифицированную помощь.