Подстановочные знаки в SQL
В этой статье пойдет разговор о подстановочных символах в структурированном языке запросов SQL (structured query language). Понимание работы соответствующего оператора Like позволит вам выполнять специальные запросы и возвращать (return) искомые значения. Будут рассмотрены примеры для системы управления базами данных MS SQL Server.
Подстановочные знаки необходимы для замены любых символов в строке с последующим сравнением и выборкой нужных данных из таблицы. Они используются при составлении запроса. В декларативном языке программирования SQL для этих целей используется специальный оператор Like. В сочетании с ключевым словом WHERE, Like обеспечивает поиск заданного шаблона в необходимом столбце.
Изучив описание и список (List of wildcards) ниже, вы узнаете, какие подстановочные знаки можно использовать с оператором Like:
- «%» — может замещать собой любые значения (ноль и больше);
- «_» — нижнее подчеркивание означает лишь один символ;
- «[]» — здесь следует любой отдельный символ;
- «^» — тоже любой символ, но не заключенный в скобки;
- «-» — через дефис можно прописать целый набор символов, некий интересующий диапазон.
Выше мы рассмотрели подстановочные знаки для MS SQL Server — СУБД от Microsoft. Однако если сравнить системы SQL Server и Access, мы увидим, что схожим образом обстоит ситуация и в случае с базами данных MS Access — они тоже имеют свою систему подстановочных элементов — вот для сравнения List of wildcards для MS Access:

Также, глядя на вышеуказанные списки, стоит учесть, что все эти элементы можно применять в разнообразных комбинациях.
Однако давайте лучше перейдем к практике: займемся составлением простейших запросов и посмотрим, как Like выполняет возвращение (returning) искомых данных.
Работа Like на примерах MS SQL Server
Для демонстрации работы оператора Like воспользуемся таблицей Customer со следующим содержимым:

Составим инструкцию, которая вернет (returned) из таблицы клиентов (from customers) всех покупателей, имена которых начинаются с буквы «а»:
SELECT * FROM Customer
WHERE FirstName LIKE ‘a%’;
После сравнения и выборки данных клиентов останется всего двое, что соответствует действительности:

Теперь давайте выполним выборку покупателей, в именах которых содержатся буквы «ci». Местонахождение этих букв в слове в нашем случае значения не имеет — главное, чтобы они были:

Мы видим, что оператор Like возвращает (returns) 2 имени. Важно понимать, что не имеет значения, где именно эти символы, ведь % может означать и ноль, то есть указанные символы могут быть и в начале слова, и в середине, и в конце. Чтобы продемонстрировать это, выполним ту же команду, но уже для телефонов. Поместив в шаблон «2», мы увидим, что возвращаются (return) все номера, где встречается цифра 2, причем вне зависимости от места расположения этой двойки:

Теперь поработаем со знаком нижнего подчеркивания. Он означает один и только один любой символ. С его помощью сделаем выборку стран, названия которых заканчиваются на «exico»:

Также учтите, что регистр в составляемом шаблоне значения не имеет, то есть Like сравнивает и возвращает (return) значения без учета регистра:

Теперь немного изменим запрос и задействуем два символа подчеркивания:

После сопоставления данных и отработки запроса мы получим такой же результат.
Дальше — интереснее. Можно выбрать из таблицы все страны, которые начинаются на «S», «F» и «G». Тут пригодятся квадратные скобки и % — то есть мы используем уже комбинацию:

Как видите, все очень даже просто. В следующем предложении выберем уже диапазон значений из нужного столбца, воспользовавшись комбинацией трех подстановочных элементов:

То есть мы вывели все страны, названия которых начинаются с букв A, B или C.
Теперь давайте вспомним, что в программировании существует равно (==) и не равно (!=). По схожей аналогии работает и [charlist]. Если в начале квадратных скобок мы поместим восклицательный знак, произойдет выборка всех данных, которые не отвечают поставленному условию (not). Синтаксис следующий:
![]()
Благодаря этому запросу мы получим все города, названия которых НЕ начинаются с букв A, B или C. Но если вернуться к таблицам начала статьи, становится понятно, что это работает лишь для БД MS Access.
Как заменить символы в строке java
Для замены символов в строке в Java можно использовать метод replace класса String :
String str = "Hello, world!"; String newStr = str.replace('l', 'z'); System.out.println(newStr); // => Hezzo, worzd!
В данном примере символ l был заменен на символ z в строке str . Результатом выполнения метода replace является новая строка, в которой все вхождения указанного символа были заменены на новый символ.
Какая функция нужна для замены символа в строке в Python?
Для замены символа в строке используется метод ‘replace()’. В качестве обязательных аргументов методу передаются искомая строка и строка, на которую нужно заменить искомую.
txt = 'I like bananas' x = txt.replace('bananas', 'apples') print(x) # => I like apples
Также в качестве третьего необязательного аргумента можно передать целое число, обозначающее какое количество вхождений искомой строки нужно поменять. Если не передавать этот параметр, будут заменены все вхождения искомой строки:
txt = 'one one was a race horse, two two was one too.' x = txt.replace('one', 'three') print(x) # => three three was a race horse, two two was three too.
txt = 'one one was a race horse, two two was one too.' x = txt.replace('one', 'three', 2) print(x) # => three three was a race horse, two two was one too.
Замена символов в строке(C)
Она в ANSI C есть, значит везде должна быть. Функция ищет первое вхождение символа в строку и возвращает его адрес. Возвращает нулевой указатель, если символ не найден.
Кстати я упустил проверку нулевого указателя. Вот пример
char* ptr
char string[]=»Sample string»
char symbol1=’s’
char symbol2=’S’
ptr=strchr (string,symbol1)
if (ptr!=NULL) *ptr=symbol2 ; замена
else printf («Символ не найден») ; Нулевой указатель
ЗЫ Как сказал яндекс и
09 декабря 2007 года
25 / / 29.12.2006
Непойму как замена осущевтвляется да и ВС пишет просто «String»,
09 декабря 2007 года
1.0K / / 08.01.2007
. char str[] = «Hello World . «;
char c = ‘e’;
char *p;
int result;
printf( «String : %s\n», str );
printf( «Search char: %c\n», c );
p = strchr( str, c );
result = (int)(p — str + 1);
if ( p != NULL )
printf( «Result : first %c found at position %d\n»,
c, result );
else
printf( «Result : %c not found\n» );
*strchr( str, c ) = ‘a’;
printf( «New String : %s\n», str );
09 декабря 2007 года
25 / / 29.12.2006
Спвасибо большое, всё работает )
09 декабря 2007 года
25 / / 29.12.2006
Криво работает =\
допустим строка «бла-бла-бла» заменить «бла» на «хах» получается «блх-блх-блх» =\
09 декабря 2007 года
1.0K / / 08.01.2007
Из MSDN примерчик.
. char s[20];
strcpy_s( s, sizeof(s), «bla-bla-bla» );
strncpy( s, «xax», 3 ); // «xax-bla-bla»
printf(«First String : %s\n», s);
strncpy( s + 4, «xax», 3 ); // «xax-xax-bla»
printf(«New String : %s\n», s);
strncpy( s + 8, «xax», 3 ); //xax-xax-xax
printf( «Last String : %s\n», s );.
Надо вопросы точней формулировать.
10 декабря 2007 года
25 / / 29.12.2006
а если допустим мы не знаем какая строка, но там все «.» должны заменяться на «:» ?
10 декабря 2007 года
1.0K / / 08.01.2007
а если допустим мы не знаем какая строка, но там все «.» должны заменяться на «:» ?
. char str[] = «Hello.My name is Vasya.»; //объявление символьного массива
int i = 0;
printf(«First String : %s\n», str);
while (str != ‘\0’) // Цикл работает пока не признак конца строки
<
if (str==’.’) //Проверка на искомый символ
str =’:’;
++i;
>
printf(«New String : %s\n», str);.
10 декабря 2007 года
25 / / 29.12.2006
Спасибо. Скрипт работает, но он может заменить только 1 симво допустим, «. » не заменин на «. »
10 декабря 2007 года
1.0K / / 08.01.2007
Он заменяет не один символ,а все символы ‘.’ на символы ‘:’.Если у тебя будет строка
,то на выходе ты получишь строку «. . . «;
10 декабря 2007 года
1.0K / / 08.01.2007
Спасибо. Скрипт работает, но он может заменить только 1 симво допустим, «. » не заменин на «. »
А ты различаешь символ и строку ? 😉 Может вопрос надо было задать по-другому : Как вставить подстроку в строку ? Если вопрос такой ,то эта тема совсем недавно была в Студентах,да еще и в 2 вариантах.Тебе принципиально на С надо или может на С++ ?
Получается так : ты задаешь вопрос хочу сделать так . Сделали. Нет. не так,надо так,хорошо сделали по-другому.То же не то.Теперь хочу поменять все символы ‘.’ на ‘:’. Поменяли.Опять не то ? Так что нужно ? Сформулируй вопрос нормально.
10 декабря 2007 года
25 / / 29.12.2006
Вообщем я только начинающий в Си. Хочу сделать автоцензуру. Т.е. в блокнот пишим все слова (ну с этим я уже разобрался. ) думал есть как и ПХП замена строки (сори не правильно выразился), но тут почитал форумы и там сказали , что такой функции нету и сказали что её можно написать самому. Начал разбираться во всех функциях строк не нашел удаления/замену (ну вообщем синтаксис отличается от пхп) я написал в 1 посте, что нужно что-то подобное str_replace, не знал что столько заморочек будет.
char mes[] = «. . . «;
int i = 0;
nullpo_retr(-1, sd);
while (mes != ‘\0’) // Цикл работает пока не признак конца строки
<
if (mes==’. ‘) //Проверка на искомый символ
mes =’. ‘;
++i;
>
printf(«New String : %s\n», str);
return 0;
Конечное сообение «. . . » пользуюсь VS 2005 (C++)