Как выполнить поиск по SQL при выполнении «среза конечных нулей» в числовом поле?

#sql #oracle

Вопрос:

У меня есть таблица бд в oracle, где у меня есть столбец, определенный как число.

Столбцы содержат такие числа, как:

Миколумна
12540000000
78590000000

Я хочу найти записи с помощью поиска MyColumn=12540000000 , а также MyColumn=1254 (без конечных нулей).

Что я мог попробовать? TO_CHAR и резкая логика или есть что-то более простое?

Ответ №1:

 rtrim(MyColumn, '0') = '1254'
 

Обратите внимание, что справа я заключил строку в кавычки (поэтому она действительно рассматривается как строка, а не число). Очевидно, вы относитесь к ним как к струнам, верно? Даже если MyColumn это число, оно будет неявно преобразовано в строку перед подачей заявки rtrim .

Комментарии:

1. Это означало бы, что, как сказал @mathguy, вы рассматриваете эти значения как строки, а не числа. Если это так, то это ставит ваш дизайн под серьезный вопрос … что столбец неправильно определен как ЧИСЛО, когда он должен быть VARCHAR2

2. похоже, мне все равно нужна более разумная логика, потому что я только что обнаружил, что она будет обрезать только 6 конечных нулей, поэтому 150000000 будет рассматриваться как 150, но с решением rtrim это будет 15. Могу ли я параметризовать rtrim?

3. @DerBenniAusA — прежде чем искать решения, вы должны хорошенько подумать о проблеме. Вам нужно удалить не более шести нулей? Или вам нужно сохранить хотя бы три цифры? Или в чем на самом деле заключается бизнес-требование? Вы не можете дать хорошее решение проблемы, которую вы сначала не определили во всех деталях.

4. @mathguy требование таково: 12540000000 должно быть найдено в случае поиска 12540000000 и 12540.

5. «12540000000 должно быть найдено в случае поиска 12540000000 и 12540». Это не требование, это единственный пример того, как выполняется требование. Что, если я поищу «1254»? Что, если я поищу «1254000»? Вам нужно объяснить логику, независимо от какого-либо конкретного примера.