Мое веб-приложение анализирует данные из загруженного файла и вставляет их в таблицу базы данных. Из-за характера входных данных (данных банковских транзакций) могут существовать повторяющиеся данные от одной загрузки к другой. В настоящее время я использую ужасно неэффективный код для проверки наличия дубликатов, загружая все строки в диапазоне дат из БД в память, перебирая их и сравнивая каждую с данными загруженного файла.
Само собой разумеется, это может стать очень медленным, поскольку размер набора данных увеличивается.
Итак, я собираюсь заменить это SQL-запросом (к базе данных MySQL), который проверяет наличие дублирующих данных, например,
SELECT count(*) FROM transactions WHERE desc = ? AND dated_on = ? AND amount = ?
Это прекрасно работает, но мой реальный случай немного сложнее. Описание транзакции во входных данных может иногда содержать ошибочную пунктуацию (например, «BANK 12323 DESCRIPTION» часто может быть представлен как «BANK.12323.DESCRIPTION»), поэтому наша существующая (в памяти) логика сопоставления выполняет небольшую очистку этого описания. прежде чем мы сделаем сравнение.
Хотя это работает в памяти, мой вопрос заключается в том, можно ли выполнить эту очистку в операторе SQL, чтобы я мог переместить эту логику сопоставления в базу данных, что-то вроде:
SELECT count(*) FROM transactions WHERE CLEAN_ME(desc) = ? AND dated_on = ? AND amount = ?
Где CLEAN_ME - это процедура, которая удаляет поле ошибочных данных.
Очевидно, что самым чистым (без каламбура!) Решением было бы сохранение уже очищенных данных в базе данных (либо в том же столбце, либо в отдельном столбце), но прежде чем я прибегну к этому Я думал, что попробую выяснить, есть ли более умный способ обойти это.
Большое спасибо