Как получить максимальное значение из последних двух цифр из max 3 в Postgresql?

#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:

демо: db<>скрипка

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