Как выйти из строки для использования с оператором LIKE в SQL Server?

Существует другая альтернатива, которая является подходом, используемым STL C++:

find(haystack.begin(), haystack.end(), needle)

я думаю, что это - яркий пример C++, кричащего "в Вашей поверхности!" к ООП. Идея состоит в том, что ООП не является серебряной пулей никакого вида; иногда вещи лучше всего описаны с точки зрения действий, иногда с точки зрения объектов, иногда ни один и иногда оба.

Bjarne Stroustrup сказал в TC ++ МН, что при разработке системы необходимо стремиться отразить действительность при ограничениях эффективного и эффективного кода. Для меня это означает, что Вы ни за чем никогда не должны следовать вслепую. Думайте о вещах под рукой (стог сена, игла) и контекст, в котором мы находимся (поиск, это - то, что выражение о).

, Если акцент о поиске, то с помощью алгоритма (действие), которое подчеркивает поиск (т.е. должен гибко соответствовать стогам сена, океанам, пустыням, связанным спискам). Если акцент о стоге сена, инкапсулируйте метод находки в объекте стога сена и так далее.

Однако иногда Вы вызываете сомнение и имеете трудные времена, делая выбор. В этом случае будьте объектно-ориентированы. Если Вы передумали позже, я думаю, что легче извлечь действие из объекта затем для разделения действия к объектам и классам.

Следуют этим инструкциям, и Ваш код будет более ясным и, ну, в общем, более красивым.

13
задан gbn 16 September 2009 в 05:09
поделиться

7 ответов

Чтобы найти «%» как буквальный, а не подстановочный знак в строке, его нужно экранировать как [%].

Теперь SQL Server нужно экранировать только 3 символа:% _ [

Итак, создайте скалярный udf, чтобы обернуть это:

REPLACE(REPLACE(REPLACE(@myString, '[', '[[]'), '_', '[_]'), '%', '[%]')

Из-за простоты (также известной как очень ограниченная) сопоставление с образцом в SQL, ничего сложнее не требуется ...

20
ответ дан 1 December 2019 в 21:25
поделиться

В TSQL вы можете заключить символы% и _ в квадратные скобки, например, [%] [_], это говорит SQL рассматривать их как литералы.

Я протестировал и подтвердил, что это работает в SQL Server 7.0, 2000 и 2005.

http://msdn.microsoft.com/en-us/library/aa933232 (SQL.80) .aspx

9
ответ дан 1 December 2019 в 21:25
поделиться

Каждый символ, который нужно обрабатывать буквально, должен быть заключен в квадратные скобки. Правая скобка берется буквально, поэтому не заключайте ее.

0
ответ дан 1 December 2019 в 21:25
поделиться

Если вы параметризуете свой запрос, вам не нужно об этом беспокоиться.

UPDATE

Как указано в комментариях рекурсивно,% по-прежнему необходимо экранировать даже в параметризованных запросах, я не осознавал, что linq to sql делает это автоматически, когда я тестировал.

Вы можете использовать ESCAPE 'x 'где x - это символ, который вы хотите использовать в качестве escape-символа. Linq to SQL делает это так

WHERE [Name] LIKE @searchText ESCAPE '~'

где @searchText = [некоторый текст с символом ~%%]

или, как утверждали другие, его можно экранировать с [%]

просмотреть документацию

0
ответ дан 1 December 2019 в 21:25
поделиться

Я считаю, что фильтр форматирования даты в шаблоне Django работает быстро и легко. Он удаляет ведущие нули. Если вы не

-1
ответ дан 1 December 2019 в 21:25
поделиться

Из документы : [ESCAPE escape_character ]

Используйте параметр ESCAPE следующим образом:

SELECT [Name] 
  FROM [Test] 
 WHERE [Name] LIKE (REPLACE(@searchText, '%', '%%') + '%') ESCAPE '%'
-1
ответ дан 1 December 2019 в 21:25
поделиться

Если вы не хотите изменять входящий текст, вы можете использовать функцию «ВЛЕВО», чтобы создать свой собственный «STARTSWITH»:

SELECT [Name] 
  FROM [Test] 
 WHERE @searchText = LEFT( [Name], LEN( @searchText ) )

(Обратите внимание, что вам, вероятно, потребуется сделать дополнительные работать для обработки случая NULL или пустой строки.)

РЕДАКТИРОВАТЬ: Удалено неверное утверждение об использовании «LIKE» для поиска «%».

-1
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: