PostgreSQL按顺序使用函数结果

PostgreSQL按顺序使用函数结果,postgresql,Postgresql,有没有办法在ORDERBY子句中使用函数调用的结果 我目前的尝试我也尝试了一些细微的变化 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; 虽

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

我目前的尝试我也尝试了一些细微的变化

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]错误:整数的输入语法无效:*****

您的查询通常是正常的,问题是对于某些行,split_partit.asset_标记的结果,'asset',2是字符串********。并且该字符串不能转换为整数

您可能希望删除选择列表中的order by和cast,并添加where split_partit.asset_标记'asset',2='*****',以缩小该数据问题

一旦解决了这个问题,在ORDERBY列表中拥有这样一个函数就完全可以了。问题注释中引用的文档部分是指将order by子句应用于并集、交集等查询的结果。换句话说,在此查询中可以找到order by:

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

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

您的查询通常是正常的,问题是对于某些行,split_partit.asset_标记的结果,'asset',2是字符串********。并且该字符串不能转换为整数

您可能希望删除选择列表中的order by和cast,并添加where split_partit.asset_标记'asset',2='*****',以缩小该数据问题

一旦解决了这个问题,在ORDERBY列表中拥有这样一个函数就完全可以了。问题注释中引用的文档部分是指将order by子句应用于并集、交集等查询的结果。换句话说,在此查询中可以找到order by:

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

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

尝试按tag_num排序时会出现什么错误?@MikeSherrill'CatRecall'无论我是直接使用函数调用还是使用列别名,都会出现相同的错误。您可以将其放入子查询中,但这可能会影响性能,如果还有别的办法的话。从SELECT it.item_type_id、it.asset_tag、split_partit.asset_tag、'asset',2::INT as tag_num FROM serials.item_在it.asset_tag(如'asset%'等)as sq ORDER BY sq.tag_num应该工作的位置键入它。从文档中:“ORDER BY可以应用于并集、交集或除组合的结果,但在这种情况下,只允许按输出列名或数字排序,而不允许按表达式排序。”,函数调用是一个表达式。当您尝试按tag_num排序时会出现什么错误?@MikeSherrill'CatRecall'无论我是直接使用函数调用还是使用列别名,都会出现相同的错误。您可以将其放入子查询中,但如果有其他方法,则可能会影响性能。从SELECT it.item_type_id、it.asset_tag、split_partit.asset_tag、'asset',2::INT as tag_num FROM serials.item_在it.asset_tag(如'asset%'等)as sq ORDER BY sq.tag_num应该工作的位置键入它。从文档中:“ORDER BY可以应用于并集、交集或除组合的结果,但在这种情况下,只允许按输出列名或数字排序,而不允许按表达式排序。