у меня есть такая таблица
Id Number (string)
1 0000231
2 00232
3 231
4 24
5 A1233
Пример: мне нужно выполнить поиск по значению 23 (может отличаться).
Ожидаемый результат:
Id Number
1 0000231
2 00232
3 23
Текущий основной поисковый код Ef
Где(c => EF.Functions.Like(c.AIN, $"{filter}%"))
Это всего лишь 3-й рекорд. В таблице есть столбец номера, который имеет строку. Но необходимо исключить ведущие 0 в подобной функции.
я не ожидаю ответа в Ef. мне нужен SQL-запрос для эффективной обработки
Обновлено:
Наконец-то найдены основы решений на @salman. Ответ в EF. Некоторые другие.
.Where(c => EF.Functions.Like(c.AIN.TrimStart('0'), $"{filter}%")
Я обновил свой вопрос, он не всегда заканчивается на 23.
Вы также можете добавить подстановочный знак % в начале, как и $"%{filter}%", за исключением одного. Можете ли вы объяснить, почему 5-я запись A1233 не ожидается в результате, поскольку она содержит подстроку 23?
@SalmanA нет, потому что мне нужно начинать только с 23, а не с середины
Спасибо, мне нужно подобное, я проверю


Если вы можете справиться с этим, используя необработанный MySQL, вы можете попробовать просто преобразовать значение столбца из текста в целое число:
SELECT Id, Number
FROM yourTable
WHERE CAST(Number AS UNSIGNED) = 23;
Спасибо за ответ, но он не всегда заканчивается цифрой 23, а также номером символа.
В MySQL вы можете использовать функцию TRIM:
where trim(leading '0' from number) like '23%'
Альтернативой может быть использование оператора REGEXP:
where number regexp '0*23'
@Ajt Это лучше, чем, скажем, ведущий подстановочный знак... но это все равно неэффективно, потому что вызов функции типа trim() для изменения сохраненных значений в таблице исключает любые шансы на использование индексов. Если вы хотите, чтобы это было эффективно, вам нужно будет добавить столбец для постоянного хранения обрезанного значения, чтобы вы могли его индексировать, и добавить код в приложение, чтобы поддерживать новый столбец в актуальном состоянии.
Спасибо @Salman, еще один последний вопрос можно использовать в SQL lite?
@ajt в SQLite вы бы использовали LTRIM, который принимает два аргумента sqlite.org/lang_corefunc.html#ltrim
SQLite? Вы отметили MySQL?
@TimBiegeleisen на самом деле в мобильном приложении я использую sql lite, а в API — мой sql… извините, изначально я думал, что синтаксис будет почти таким же… но после получения ответа я понял, что не будет работать для обоих
Почему бы просто не
Where(c => c.AIN.EndsWith(filter)?