如何将select结果强制转换为类型化值

bvuwiixz  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(389)

有什么常用的做法吗 SELECT 结果作为类型化值,例如函数参数?
会是这样吗?

func((SELECT number FROM numbers WHERE user_id = 1 LIMIT 1).number::numeric)

我想到了 CURSOR 但我不太确定。谢谢你的建议!
我使用的是postgresql,所以如果有任何特定的解决方案,请随意分享。

s1ag04yj

s1ag04yj1#

使用 FROM 子句或公共表表达式:

SELECT func(a.x, b.y)
FROM (SELECT ... LIMIT 1) AS a
   CROSS JOIN (SELECT ... LIMIT 1) AS b;

WITH a AS (SELECT ... LIMIT 1),
     b AS (SELECT ... LIMIT 1)
SELECT func(a.x, b.y)
FROM a CROSS JOIN b;
ulmd4ohb

ulmd4ohb2#

这不是你想要的吗?

func( (SELECT number FROM numbers WHERE user_id = 1 LIMIT 1)::numeric )

子查询返回(最多)一个值,因此它是标量子查询,相当于查询中的标量引用。
也就是说,还有很多其他的表达方式。例如:

func( (SELECT number::numeric FROM numbers WHERE user_id = 1 LIMIT 1) )

或:

(SELECT func(number::numeric) FROM numbers WHERE user_id = 1 LIMIT 1)

或者搬到 from 子句并使用横向联接。或在cte或子查询中计算结果。

相关问题