При создании текстового поиска в веб-сайт я передаю его через петлю PHP:Игнорировать определенные символы в DB2 ЗЕЬЕСТЕ
$queryList=explode(' ', $queryString);
foreach ($queryList as $queryParm) {
foreach ($fields as $key => $query) {
$whereStr.=($key == 0) ? " AND (ucase($query) LIKE ?" : " OR ucase($query) LIKE ?";
$db->parms[]="%$queryParm%";
if ($key+1 == count($fields)) $whereStr.=")";
}
}
Это отдельные слова в запросе и сделать каждый отдельный параметр. Я создаю регулярное выражение, чтобы разрешить буквенно-цифровые пробелы, но теперь проблема в том, что мне нужен SQL для соответствия этому регулярному выражению, например, если есть элемент с именем «FellerCo Unicorn Repellerant # 123», затем поиск «fakecos unicorn repellant 123 "должен дать результат, игнорируя тот факт, что существуют" "и" # ". На самом деле из-за структуры списка «123 fakeco» должен также показать результат.
Есть ли способ применить регулярное выражение к оператору DB2?
Это время бежал против DB2 для I (версия 7.1)
Edit: попытка решения (вставить это раньше PHP упоминалось выше), некоторые персонажи вызвали вопросы & должны были быть удалены, низкая производительность, когда она работать
$sqlNeedsEscape=array("?", "'");
$ignoreChars="'\"[email protected]#$%^&*()-=+[]{}|<>,./\\";
$ignoreChars=str_split($ignoreChars);
$whereBefore='';
$whereAfter='';
foreach ($ignoreChars as &$ic) {
if (in_array($ic, $sqlNeedsEscape)) $ic="'$ic";
error_log($ic);
$whereBefore.="replace(";
$whereAfter.=",'$ic','')";
}
Затем измените $whereStr.=
строку:
$whereStr.=($key == 0) ? " AND (ucase(trim($whereBefore $query $whereAfter)) LIKE ?" : " OR $whereBefore ucase(trim($query)) $whereAfter LIKE ?";
Эффективно это было заменить (заменить (заменить (query, '!', ''), '@', ''), '#', '') для каждого поля, только оберните еще несколько заметок вокруг этого. Я перестала преследовать эту идею, когда увидела, какое влияние она оказывает на производительность. Я поговорю с нашими разработчиками RPG о решении UDF, предложенном Баком Калабро. Это похоже на единственное «реальное» решение.
Задумывались ли Вы о отображение данных с помощью специального двигателя, таких как фантастический [ElasticSearch] (http://www.elasticsearch.org)? Будучи Java, он даже будет запускаться изначально на IBM i. – jamesallman