Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在postgres typecast中传递变量_Sql_Postgresql - Fatal编程技术网

Sql 在postgres typecast中传递变量

Sql 在postgres typecast中传递变量,sql,postgresql,Sql,Postgresql,我尝试在Postgresql中执行以下操作 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

我尝试在Postgresql中执行以下操作

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|u two.x | |,”(“| | table|u one.x | |”)::lseg

您可以通过更清晰地将第二个建议括起来使其起作用-强制转换优先于连接,因此它尝试将“)”强制转换到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)))

第二个应该可以工作…当您尝试它时发生了什么?我得到了这个
错误:类型lseg的输入语法无效
而且x和y列是浮动的