Существует другая альтернатива, которая является подходом, используемым STL C++:
find(haystack.begin(), haystack.end(), needle)
я думаю, что это - яркий пример C++, кричащего "в Вашей поверхности!" к ООП. Идея состоит в том, что ООП не является серебряной пулей никакого вида; иногда вещи лучше всего описаны с точки зрения действий, иногда с точки зрения объектов, иногда ни один и иногда оба.
Bjarne Stroustrup сказал в TC ++ МН, что при разработке системы необходимо стремиться отразить действительность при ограничениях эффективного и эффективного кода. Для меня это означает, что Вы ни за чем никогда не должны следовать вслепую. Думайте о вещах под рукой (стог сена, игла) и контекст, в котором мы находимся (поиск, это - то, что выражение о).
, Если акцент о поиске, то с помощью алгоритма (действие), которое подчеркивает поиск (т.е. должен гибко соответствовать стогам сена, океанам, пустыням, связанным спискам). Если акцент о стоге сена, инкапсулируйте метод находки в объекте стога сена и так далее.
Однако иногда Вы вызываете сомнение и имеете трудные времена, делая выбор. В этом случае будьте объектно-ориентированы. Если Вы передумали позже, я думаю, что легче извлечь действие из объекта затем для разделения действия к объектам и классам.
Следуют этим инструкциям, и Ваш код будет более ясным и, ну, в общем, более красивым.
Чтобы найти «%» как буквальный, а не подстановочный знак в строке, его нужно экранировать как [%].
Теперь SQL Server нужно экранировать только 3 символа:% _ [
Итак, создайте скалярный udf, чтобы обернуть это:
REPLACE(REPLACE(REPLACE(@myString, '[', '[[]'), '_', '[_]'), '%', '[%]')
Из-за простоты (также известной как очень ограниченная) сопоставление с образцом в SQL, ничего сложнее не требуется ...
В TSQL вы можете заключить символы% и _ в квадратные скобки, например, [%] [_], это говорит SQL рассматривать их как литералы.
Я протестировал и подтвердил, что это работает в SQL Server 7.0, 2000 и 2005.
http://msdn.microsoft.com/en-us/library/aa933232 (SQL.80) .aspx
Каждый символ, который нужно обрабатывать буквально, должен быть заключен в квадратные скобки. Правая скобка берется буквально, поэтому не заключайте ее.
Если вы параметризуете свой запрос, вам не нужно об этом беспокоиться.
UPDATE
Как указано в комментариях рекурсивно,% по-прежнему необходимо экранировать даже в параметризованных запросах, я не осознавал, что linq to sql делает это автоматически, когда я тестировал.
Вы можете использовать ESCAPE 'x 'где x - это символ, который вы хотите использовать в качестве escape-символа. Linq to SQL делает это так
WHERE [Name] LIKE @searchText ESCAPE '~'
где @searchText = [некоторый текст с символом ~%%]
или, как утверждали другие, его можно экранировать с [%]
Я считаю, что фильтр форматирования даты в шаблоне Django работает быстро и легко. Он удаляет ведущие нули. Если вы не
Из документы : [ESCAPE escape_character ]
Используйте параметр ESCAPE
следующим образом:
SELECT [Name]
FROM [Test]
WHERE [Name] LIKE (REPLACE(@searchText, '%', '%%') + '%') ESCAPE '%'
Если вы не хотите изменять входящий текст, вы можете использовать функцию «ВЛЕВО», чтобы создать свой собственный «STARTSWITH»:
SELECT [Name]
FROM [Test]
WHERE @searchText = LEFT( [Name], LEN( @searchText ) )
(Обратите внимание, что вам, вероятно, потребуется сделать дополнительные работать для обработки случая NULL или пустой строки.)
РЕДАКТИРОВАТЬ: Удалено неверное утверждение об использовании «LIKE» для поиска «%».