PostgreSQL在ORDER BY中使用函数结果

时间:2016-11-14 19:49:42

标签: postgresql

有没有办法在order by子句中使用函数调用的结果?

我目前的尝试(我也试过了一些细微的变化)。

SELECT it.item_type_id, it.asset_tag, split_part(it.asset_tag, 'ASSET', 2)::INT as tag_num
FROM serials.item_types it
WHERE it.asset_tag LIKE 'ASSET%'
ORDER BY split_part(it.asset_tag, 'ASSET', 2)::INT;

虽然我的一般假设是无法做到这一点,但我想知道是否有办法实现这一目标,而我并没有想到。

编辑:上面的查询提供了以下错误[22P02] ERROR: invalid input syntax for integer: "******"

1 个答案:

答案 0 :(得分:2)

您的查询通常没问题,问题是对于某些行,split_part(it.asset_tag, 'ASSET', 2)的结果是字符串******。并且该字符串不能转换为整数。

您可能希望删除选择列表中的订单和强制转换,并添加where split_part(it.asset_tag, 'ASSET', 2) = '******',以缩小该数据问题的范围。

一旦解决了这个问题,按列表顺序排列这样的功能就完全没问了。该问题评论中文档的引用部分是指将order by子句应用于UNIONINTERSECTION等查询的结果。换句话说,在此查询中找到的顺序:

(select column1 as result_column1 from table1
 union
 select column2 from table 2)
order by result_column1

只能引用累积结果列,而不能引用各行的表达式。