如何从 Postgresql 中的最大值 3 的最后两位数中获取最大值?
How to get Max value from last two digits out of max 3 in Postgresql?
我想trim一些数字到两位数并从中得到最大值。
我的 table 列称为“千”(int4),其值如下:
- 912
- 905
- 900
- 11
- 7
- 6
我希望收到值 12,因为在 trim 将数字调到最大值之后。两位数字,912 应转换为 12,高于 11,但我使用查询收到 7:
SELECT MAX(RIGHT("thousands"::varchar, 2))
FROM "numbers"
我猜 RIGHT([string], [number of digits from right to left]) 当值的位数少于请求的位数时会搞砸,但我不知道如何实现所需的解决方案。有人可以帮忙吗?
RIGHT()
returns 一个 text
输出。因此,MAX()
应用于此输出并使用字母顺序。在这个顺序中,7
在 12
之后,因为 7 > 1
(1
作为 12
的第一个字符)。为避免这种情况,您可以在使用 MAX()
:
之前将 RIGHT()
结果转换为类型 int
SELECT
MAX(RIGHT(thousands::text, 2)::int)
FROM t
更好更快的方法是使用数字运算而不是双重转换您的值。因此,可以使用模运算 %
:
计算数字的最后一位
SELECT
MAX(thousands % 100)
FROM t
我想trim一些数字到两位数并从中得到最大值。
我的 table 列称为“千”(int4),其值如下:
- 912
- 905
- 900
- 11
- 7
- 6
我希望收到值 12,因为在 trim 将数字调到最大值之后。两位数字,912 应转换为 12,高于 11,但我使用查询收到 7:
SELECT MAX(RIGHT("thousands"::varchar, 2))
FROM "numbers"
我猜 RIGHT([string], [number of digits from right to left]) 当值的位数少于请求的位数时会搞砸,但我不知道如何实现所需的解决方案。有人可以帮忙吗?
RIGHT()
returns 一个 text
输出。因此,MAX()
应用于此输出并使用字母顺序。在这个顺序中,7
在 12
之后,因为 7 > 1
(1
作为 12
的第一个字符)。为避免这种情况,您可以在使用 MAX()
:
RIGHT()
结果转换为类型 int
SELECT
MAX(RIGHT(thousands::text, 2)::int)
FROM t
更好更快的方法是使用数字运算而不是双重转换您的值。因此,可以使用模运算 %
:
SELECT
MAX(thousands % 100)
FROM t