#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»? Вам нужно объяснить логику, независимо от какого-либо конкретного примера.