Nano Hash - криптовалюты, майнинг, программирование

Использование данных столбца в качестве шаблона для соответствия регулярному выражению

Недавно мы перешли с MySQL на PostgreSQL. Большинство запросов были переведены, за исключением запросов с ключевым словом REGEXP в Mysql:

MySQL (prepared statement):
SELECT * FROM table WHERE ? REGEXP identifier;

У нас есть «таблица», и один из столбцов называется «идентификатор». Этот столбец «идентификатор» содержит фактический шаблон регулярного выражения.

Таким образом, вместо «жесткого кодирования» шаблона регулярного выражения в запросе он ищет столбец идентификатора для шаблона.

В Postgresql нам нужно использовать ключевое слово «~» вместо «REGEXP» (только для MySQL), но с Postgresql я не могу извлечь шаблон из столбца.

Я безуспешно пробовал следующие запросы:

SELECT * FROM table WHERE 'test' ~ "identifier";
ERROR:  invalid regular expression: parentheses () not balanced


SELECT * FROM table WHERE "identifier" ~ 'test';
-> no results

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

Помощь очень приветствуется, спасибо!

26.11.2012

  • Почему вы используете имя столбца в кавычках? Попробуйте без них. 26.11.2012
  • @sufleR Проблема не в этом. Двойные кавычки используются в postgresql для указания точного имени столбца/таблицы/схемы/функции... 26.11.2012
  • Нам нужно увидеть ваш реальный шаблон регулярного выражения. Пожалуйста, предоставьте образцы строк, которые не подходят для вас в вопросе или как sqlfiddle. 26.11.2012

Ответы:


1

Может проблема в одной из строк регулярного выражения? (Как говорит строка ошибки)

я тестировал

SELECT *
FROM table1 t
WHERE 'cat' ~ t.reg;

И это работает для меня. Вот моя скрипта SQL. http://sqlfiddle.com/#!12/f245c/3

Проблема может заключаться в различной интерпретации регулярных выражений. Подробности о регулярном выражении postgresql здесь http://www.postgresql.org/docs/current/static/functions-matching.html

UPD Также читайте http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS для получения подробной информации о строках postgresql. Это нужно для правильного написания регулярного выражения.

26.11.2012
  • Спасибо, Игорь, я прочитал страницу регулярных выражений postgresql. фактический шаблон регулярного выражения должен быть правильным (я использую .* для проверки). Могу я спросить, какую версию postgresql вы используете? потому что я протестировал ваш пример, и он у меня не сработал: SELECT * FROM Table1 t WHERE 'cat' ~ t.reg; ОШИБКА: неверное регулярное выражение: круглые скобки () не сбалансированы 26.11.2012
  • @Freqo Я тестировал 8.3 8.4 9.1 9.2 . См. ссылку SQL Fiddle sqlfiddle.com/#!1/f245c/1 (вы можете выбрать версию postgresql вверху страницы) 26.11.2012
  • @Freqo: Можете ли вы воспроизвести свою проблему на sqlfiddle.com, чтобы мы могли точно увидеть, что происходит? 26.11.2012
  • Нет, я не могу воспроизвести с sqlfiddle.com, там все работает ;) 28.11.2012
  • Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..