Sql, как без ведущих 0

у меня есть такая таблица

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}%") 

Почему бы просто не Where(c => c.AIN.EndsWith(filter)?

Svyatoslav Danyliv 24.02.2024 17:17

Я обновил свой вопрос, он не всегда заканчивается на 23.

Lajith 24.02.2024 17:24

Вы также можете добавить подстановочный знак % в начале, как и $"%{filter}%", за исключением одного. Можете ли вы объяснить, почему 5-я запись A1233 не ожидается в результате, поскольку она содержит подстроку 23?

rickdenhaan 24.02.2024 17:26

@SalmanA нет, потому что мне нужно начинать только с 23, а не с середины

Lajith 24.02.2024 17:31

Спасибо, мне нужно подобное, я проверю

Lajith 24.02.2024 17:36
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы можете справиться с этим, используя необработанный MySQL, вы можете попробовать просто преобразовать значение столбца из текста в целое число:

SELECT Id, Number
FROM yourTable
WHERE CAST(Number AS UNSIGNED) = 23;

Спасибо за ответ, но он не всегда заканчивается цифрой 23, а также номером символа.

Lajith 24.02.2024 17:26
Ответ принят как подходящий

В MySQL вы можете использовать функцию TRIM:

where trim(leading '0' from number) like  '23%'

Альтернативой может быть использование оператора REGEXP:

where number regexp '0*23'

@Ajt Это лучше, чем, скажем, ведущий подстановочный знак... но это все равно неэффективно, потому что вызов функции типа trim() для изменения сохраненных значений в таблице исключает любые шансы на использование индексов. Если вы хотите, чтобы это было эффективно, вам нужно будет добавить столбец для постоянного хранения обрезанного значения, чтобы вы могли его индексировать, и добавить код в приложение, чтобы поддерживать новый столбец в актуальном состоянии.

Joel Coehoorn 24.02.2024 17:45

Спасибо @Salman, еще один последний вопрос можно использовать в SQL lite?

Lajith 24.02.2024 17:47

@ajt в SQLite вы бы использовали LTRIM, который принимает два аргумента sqlite.org/lang_corefunc.html#ltrim

Salman Arshad 24.02.2024 19:19

SQLite? Вы отметили MySQL?

Tim Biegeleisen 25.02.2024 00:20

@TimBiegeleisen на самом деле в мобильном приложении я использую sql lite, а в API — мой sql… извините, изначально я думал, что синтаксис будет почти таким же… но после получения ответа я понял, что не будет работать для обоих

Lajith 25.02.2024 03:16

Другие вопросы по теме