Поделиться через


_ (подстановочный знак — соответствует одному символу) (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в предварительной версии Microsoft Fabric

Используйте символ _ подчеркивания для сопоставления любого одного символа в операции сравнения строк, которая включает сопоставление шаблонов, например LIKE и PATINDEX.

Examples

Примеры кода в этой статье используют базу данных образца AdventureWorks2022 или AdventureWorksDW2022, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.

A. Basic example

В следующем примере возвращаются все имена баз данных, которые начинаются с буквы m и имеют третью букву d. Символ подчеркивания указывает, что вторым символом в имени может быть любая буква. Этому условию удовлетворяют базы данных model и msdb. А база данных master — нет.

SELECT name FROM sys.databases
WHERE name LIKE 'm_d%';

Вот результирующий набор.

name
-----
model
msdb

У вас могут быть дополнительные базы данных, соответствующие этим критериям.

Для представления нескольких символов можно использовать несколько символов подчеркивания. Изменение условий LIKE , включающих два подчеркивания 'm__% , включает master базу данных в результат.

B. Более сложный пример

В следующем примере оператор используется _ для поиска всех людей в Person таблице, у которых есть трехбуквенный первый имя, который заканчивается an.

SELECT FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '_an'
ORDER BY FirstName;

C. Экранирование символа подчеркивания

В следующем примере возвращаются имена фиксированных ролей базы данных, таких как db_owner и db_ddladmin, но он также возвращает пользователя dbo .

SELECT name FROM sys.database_principals
WHERE name LIKE 'db_%';

Подчеркивание в третьей позиции символа принимается как подстановочный знак и не фильтруется только для субъектов, начиная с букв db_. Чтобы избежать подчеркивания, заключите его в квадратные скобки [_].

SELECT name FROM sys.database_principals
WHERE name LIKE 'db[_]%';

Теперь пользователь dbo исключен.

Вот результирующий набор.

name
-------------
db_owner
db_accessadmin
db_securityadmin
...