2013-11-26 51 views
0

我试图做PostgreSQL中传递Postgres的变量类型转换

SELECT * FROM table_one 
INNER JOIN table_two ON table_one.id = table_two.table_one_id 
WHERE (table_one.some_value > length('((-1,0),(table_two.x,table_two.y))'::lseg)) 

以下显然,这并不工作,所以我的问题是你怎么做这样的事?

'((-1,0),(%,%))'::lseg , table_two.x , table_two.y

'((-1,0),('|| table_two.x ||',('|| table_one.x || '))'::lseg

+0

第二个应该工作...当你尝试过什么事? –

+0

我得到这个错误:类型lseg的无效输入语法也x和y列浮动 – marknery

回答

1

您可以通过更清楚地包围它使你的第二个建议的工作 - 铸造优先于级联所以它试图投“))”到LSEG 。如果您铸造前括号串接中的语句将工作...

length(('((-1,0),('|| table_two.x ||','|| table_two.y || '))')::lseg) 

但它会整洁的类型转换函数使用的字段值。至少这样的错误信息会更有意义,如果有的话。

在这种情况下,用两点定义lseg。构建其中的一个要点是建立在字面上,并从表格中的字段中构建。

length(lseg('(-1,0)'::point, point(table_two.x, table_two.y))) 

或两者的数值,这是我认为最好看,也恰好是最短

length(lseg(point(-1,0), point(table_two.x, table_two.y)))