#postgresql #max #trim #digits
#postgresql #макс #обрезать #цифры
Вопрос:
Я хочу обрезать некоторые числа до двух цифр и получить из них максимальное значение.
Столбец моей таблицы называется «тысячи» (int4) и имеет такие значения, как:
- 912
- 905
- 900
- 11
- 7
- 6
Я ожидаю получить значение 12, потому что после обрезки чисел до макс. из двух цифр 912 должно быть преобразовано в 12, что выше 11, но я получаю 7 с помощью запроса:
SELECT MAX(RIGHT("thousands"::varchar, 2))
FROM "numbers"
Я предполагаю, что RIGHT ([строка], [количество цифр справа налево]) сбивает с толку, когда значение имеет меньше цифр, чем запрошено, но я не знаю, как достичь требуемого решения. Кто-нибудь может помочь, пожалуйста?
Комментарии:
1. ВЫБЕРИТЕ MAX(RIGHT(«thousands»:: varchar, 2)::int) ИЗ «numbers»
2. Это тоже работает. Большое вам спасибо!
Ответ №1:
RIGHT()
возвращает text
вывод. Итак, MAX()
применяется к этому выводу и использует алфавитный порядок. В этом порядке 7
идет после 12
because 7 > 1
( 1
как первый символ 12
). Чтобы избежать этого, вы могли бы привести RIGHT()
результат к типу int
впоследствии, прежде чем использовать MAX()
:
SELECT
MAX(RIGHT(thousands::text, 2)::int)
FROM t
Лучшими и более быстрыми способами было бы использовать числовые операции вместо двойного приведения ваших значений. Итак, последняя цифра числа может быть вычислена с использованием операции по модулю %
:
SELECT
MAX(thousands % 100)
FROM t