我正在使用带有Node.js的npm模块pg
,并且具有以下查询:
query = "SELECT * FROM territories WHERE '($1, -122.26), (47.57, -122.36)'::box \
@> point(nwlat, nwlng) ORDER BY nwlat, nwlng;"
client.query(query, [lat+.05], callback);
当我运行它时,我收到以下错误:
invalid input syntax for type box: "($1, -122.26), (47.57, -122.36)"
但是当我用$1
之类的十进制文字替换47.67
时,它会正常执行。我做错了什么?
答案 0 :(得分:1)
你的问题是:
'$1'
在其中没有占位符,它是一个字符串文字,恰好包含一些看起来像编号占位符的字符。所以这个:
'($1, -122.26), (47.57, -122.36)'
也没有占位符,这只是一个恰好包含字符$
和1
的字符串文字。考虑一下这个区别:
let x = 6;
let y = 'x'; // String that contains the name of a variable.
和此:
let x = 6;
let y = x; // The actual variable itself.
在JavaScript中,同样的想法。
您可以使用字符串连接构建box
字符串:
WHERE ('(' || $1 || ', -122.26), (47.57, -122.36)')::box
但那不是很漂亮。一个更清洁的解决方案是使用point
and box
functions:
WHERE box(point($1, -122.26), point(47.57, -122.36))
答案 1 :(得分:0)
延长@mu的答案太短
使用pg-promise查询格式,您可以得到您期望的结果;)