Когда я сегодня писал страницу, я тоже был очень подавлен. В таблице были записи, но я не смог их найти в ASP. Это оказалось вызвано разными символами подстановки в операторах запроса доступа и SQL. .
Сравнение подстановочных знаков в ACCESS и подстановочных знаков в SQL SERVER.
=============================================== =
Подстановочные знаки для библиотеки ACCESS:
*соответствует любому количеству символов
?соответствует любому однобуквенному символу
Подстановочные знаки в SQL Server:
% соответствует любому количеству символов
_ соответствует одному символу
текст
Когда я сегодня писал страницу, я тоже был очень подавлен. В таблице были записи, но я не смог их найти в ASP. Теоретическая инструкция SQL выглядит следующим образом:
Выберите * FROM t_food Где t_food.name, например '*apple*'
Выполнив поиск в GOOGLE, я обнаружил, что нечеткий запрос в ASP должен быть записан следующим образом:
Выберите * FROM t_food Где t_food.name, например '%%apple%%'
Это должен быть %, и их должно быть два. Пожалуйста, обратите внимание.
++++++++++++++++++++++++++++++++++++++++++++++++ ++ ++++++++++++++++++++++
Проблема с подстановочными знаками оператора SQL-запроса
При использовании инструкций SQL для запроса данных в Access для запроса используется подстановочный знак *. Заявление заключается в следующем:
Выберите * из обычного, где имя книги, например '*h*'
Пробовал в режиме SQL Access без проблем, все работает нормально. Итак, я вписал оператор SQL в программу на C#, но как только оператор запроса был достигнут, произошла ошибка. Поэтому я поискал файл справки Access и нашел следующую справку:
/////////////////////////////////////////////////// /// //////////
Сравнивает строковое выражение с шаблоном в выражении SQL.
грамматика
выражение как шаблон
Синтаксис оператора Like состоит из следующих частей:
Частичное описание
выражение Выражение SQL, используемое в предложении Where.
Шаблон строкового литерала сравнивается с выражением.
иллюстрировать
Вы можете использовать оператор Like для поиска значений полей, соответствующих заданному шаблону. Для шаблона можно указать полное значение (например, Like Smith) или использовать подстановочные знаки для поиска диапазона значений (например, Like Sm*).
В выражениях вы можете использовать оператор Like для сравнения значений полей со строками. Например, если вы введете Like C* в SQL-запрос, запрос вернет все значения полей, начинающиеся с буквы C. В запросе параметров вы можете предложить пользователю ввести шаблон для поиска.
В следующем примере возвращаются данные, которые начинаются с буквы P, за которой следует любая буква от A до F и три цифры:
Нравится P[AF]###
В следующей таблице показано, как протестировать различные шаблоны выражений с помощью Like.
тип соответствия
сопоставление с образцом
(Возврат True) Нет совпадения
(Вернуть ложь)
Несколько символов a*a aa, aBa, aBBBa aBC
*ab* abc, AABB, Xab aZb, bac
Специальный символ А
аа*ааа
Несколько символов ab* abcdefg, abc cab, aab
Одиночный символ a?a aaa, a3a, aBa aBBBa
Одиночные числа а#а а0а, а1а, а2а ааа, а10а
Диапазон символов [az] f, p, j 2, &
Вне диапазона [!az] 9, &, % b, a
Нечисловые значения [!0-9] A, a, &, ~ 0, 1, 9
Составное значение a[!bm]# An9, az0, a99 abc, aj0
Справочный адрес: http://office.microsoft.com/zh-cn/assistance/HP010322532052.aspx.
/////////////////////////////////////////////////// /// /////////
В хелпе это написано, проблем нет В чем проблема? Это смущает меня еще больше. Позже я спросил коллегу и сказал: «Ваша инструкция SQL неверна. Подстановочный знак должен быть % вместо *». Но в справке написано *, и при тестировании в Access все работает нормально. Коллеги не могут объяснить почему, поэтому продолжают искать ответы на запросы о помощи. Следующая информация была найдена в другом файле справки:
/////////////////////////////////////////////////// /// /////////
Встроенные методы сопоставления с образцом предоставляют общий инструмент для сравнения строк. В следующей таблице показаны подстановочные знаки, которые можно использовать с оператором Like, а также числа и строки, которым они соответствуют.
Символы в образце Совпадения в выражениях
? или _ (подчеркивание) любого отдельного символа
* или % ноль или более символов
# Любое одно число (0-9)
[список символов] Любой одиночный символ в списке символов.
[!charlist] Любой одиночный символ, не входящий в список символов.
Вы можете использовать набор из одного или нескольких символов (список символов), заключенный в квадратные скобки ([]), чтобы соответствовать любому отдельному символу в выражении, а список символов может содержать большинство символов набора символов ANSI, включая числа. Определенные символы, такие как левая скобка ([), вопросительный знак (?), знак цифры (#) и звездочка (*), можно сопоставить непосредственно с самими символами, заключив их в квадратные скобки. Закрывающую скобку нельзя использовать внутри группы, чтобы она соответствовала самой себе, но ее можно использовать как отдельный символ вне группы.
В дополнение к простому списку символов, заключенному в квадратные скобки, список символов может иметь верхнюю и нижнюю границы диапазона, разделенные дефисом (-). Например, при использовании в шаблоне [AZ] совпадение достигается, если соответствующий символ в выражении содержит любой символ верхнего регистра в диапазоне от A до Z. Вы можете заключить несколько диапазонов в квадратные скобки, не разделяя их. Например, [a-zA-Z0-9] соответствует любому буквенно-цифровому символу.
Обратите внимание, что подстановочные знаки ANSI SQL (%) и (_) допустимы только в версии Microsoft® Jet 4.X и поставщике Microsoft OLE DB для Jet. Если они используются в Microsoft Access или DAO, они обрабатываются как текст.
Другие важные правила сопоставления с образцом заключаются в следующем:
Использование восклицательного знака (!) в начале списка символов указывает на то, что совпадение произойдет, если в выражении появится какой-либо символ за пределами списка символов. При использовании вне квадратных скобок восклицательный знак соответствует самому себе.
Дефис (-) можно использовать в начале (после восклицательного знака) или в конце списка символов, чтобы он соответствовал самому себе. В любой другой позиции дефис обозначает диапазон символов ANSI.
Если указан диапазон символов, символы должны располагаться в порядке возрастания (AZ или 0–100). [AZ] — допустимый режим, [ZA] — недействительный режим.
Порядок символов [ ] игнорируется; он рассматривается как символ нулевой длины ( ).
Справочный адрес: http://office.microsoft.com/zh-cn/assistance/HP010322842052.aspx.
/////////////////////////////////////////////////// /// //////////////
На данный момент причина наконец найдена. Поскольку я использую подстановочный знак * в Access, все работает нормально, но если я изменю его на %, это не удастся. В C# поддерживается только подстановочный знак %, и замена его на * приведет к ошибке! Считается ли эта проблема проблемой совместимости?
Подстановочный знак:
Пример описания подстановочных знаков
% Любая строка, содержащая ноль или более символов. WHERE title LIKE '%computer%' найдет все названия книг, содержащие слово «компьютер» в любом месте заголовка.
_ (подчеркивание) Любой одиночный символ. ГДЕ au_fname LIKE '_ean' найдет все 4-буквенные имена, оканчивающиеся на ean (Дин, Шон и т. д.).
[ ] Указывает любой одиночный символ в диапазоне ([af]) или наборе ([abcdef]). Где au_lname LIKE '[CP]arsen' найдет фамилии авторов, заканчивающиеся на арсен и начинающиеся с любого одиночного символа между C и P, например, Карсен, Ларсен, Карсен и т. д.
[^] Любой одиночный символ, не принадлежащий указанному диапазону ([af]) или множеству ([abcdef]). Где au_lname LIKE 'de[^l]%' найдет все фамилии авторов, которые начинаются с de и не сопровождаются буквой l.
Используйте подстановочные знаки в качестве литералов
Строки, соответствующие шаблону с подстановочными знаками, можно использовать в качестве литеральных строк, заключая подстановочные знаки в круглые скобки. В следующей таблице показан пример использования ключевого слова LIKE и подстановочного знака [ ].
Значение символа
НРАВИТСЯ '5[%]' 5%
НРАВИТСЯ '[_]n' _n
КАК '[a-cdf]' a, b, c, d или f
КАК '[-acdf]' -, a, c, d или f
НРАВИТЬСЯ '[ [ ]' [
НРАВИТЬСЯ ']' ]
НРАВИТСЯ 'abc[_]d%' abc_d и abc_de
НРАВИТСЯ 'abc[def]' abcd, abce и abcf
Сопоставление с образцом с использованием предложения ESCAPE
Ищет строки, содержащие один или несколько специальных подстановочных символов. Например, таблица скидок в базе данных клиентов может хранить значения скидок со знаком процента (%). Чтобы найти знак процента в виде символа, а не подстановочного знака, необходимо указать ключевое слово ESCAPE и escape-символ. Например, пример базы данных содержит столбец с именем comment, который содержит 30 % текста. Чтобы найти любые строки, содержащие 30 % строки в любом месте столбца комментариев, укажите предложение Where, состоящее из комментария WHERE LIKE '%30!%%' ESCAPE '!'. Если вы не укажете ESCAPE и escape-символ, SQL Server вернет все строки, содержащие строку 30.
В следующем примере показано, как выполнить поиск строки «скидка 50% при покупке 100 или более копий» в столбце примечаний таблицы заголовков в базе данных пабов:
Выберите заметки ИЗ названий, где примечания ТАК «Скидка 50%% при покупке 100 или более копий» ESCAPE «%»