2013-11-26 48 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)))