是否有内置函数可以截断一种类型的值以适应另一种类型的范围?例如,将
INTEGER
转换为 SMALLINT
。如果 INTEGER
大于 SMALLINT
所能容纳的大小,这可能会失败。在这种情况下,我希望将数字截断为尽可能大的SMALLINT
。
据我所知,没有内置函数,您需要使用 case 表达式来处理最小值和最大值,例如:
SELECT CASE
WHEN your_integer_column > 32767 THEN 32767
WHEN your_integer_column < -32768 THEN -32768
ELSE your_integer_column
END::smallint AS truncated_smallint
FROM your_table;