我有一个表 'article' 与列 'content' 。我想查询 Postgresql 以搜索包含在变量 'temp' 中的字符串。此查询工作正常 -
pool.query("select * from article where upper(content) like upper('%some_value%')");
Run Code Online (Sandbox Code Playgroud)
但是,当我使用占位符 $1 和 [temp] 代替 some_value 时,出现上述错误 -
pool.query("select * from article where upper(content) LIKE upper('%$1%')",[temp] );
Run Code Online (Sandbox Code Playgroud)
注意 - 这里 $1 是一个占位符,应该由 [temp] 中的值替换,但我猜它会将 '%$1%' 视为 string 。没有引号 ' ' , LIKE 运算符不起作用。我也试过查询 -
pool.query("select * from article where upper(content) LIKE upper(concat('%',$1,'%'))",[temp] );
Run Code Online (Sandbox Code Playgroud)
确保 $1 不被视为字符串文字,但它给出了错误 - 错误:无法确定参数 $1 的数据类型
pool.query(
"select * from article where upper(content) LIKE upper('%' || $1 || '%')",
[temp]
).then( res => {console.log(res)}, err => {console.error(err)})
Run Code Online (Sandbox Code Playgroud)
这对我有用。我只是查看了这个 Postgres 文档页面,试图了解concat参数符号的作用。不能说我此时理解使用||运算符和使用concat字符串函数的区别。
我发现这样做的最简单方法如下:
// You can remove [0] from character[0] if you want the complete value of character.
database.query(`
SELECT * FROM users
WHERE LOWER(users.name) LIKE LOWER($1)
ORDER BY users.id ASC`,
["%" + character[0] + "%"]
);
Run Code Online (Sandbox Code Playgroud)
// [ %${character}%] 替代函数调用中最后一行的字符串文字。
这里有几件事情正在发生,所以让我把每一行都分解一下。
SELECT * FROM users
usersWHERE LOWER(users.name) LIKE $1
where的name(小写)列users就像参数$1。ORDER BY users.id ASC
users.id或id列users。客户端数据呈现的一种流行替代方法是users.created_at DESC按其创建日期以相反的顺序显示最新用户(或很可能是文章/帖子/评论),以便您在数组顶部获得最新内容以循环并显示在客户端。["%" + character + "%"]
client如果您保留该名称,则可以将其命名为您想要的名称,并且数据库对我来说比“客户端”更有意义,但是只是我的个人意见,很有可能“客户”可能是技术上更正确的术语)。第二个参数需要是一个值数组。例如,它代替插入在查询字符串中的参数,$1或者?是参数占位符的示例,这些占位符用第二个参数的值数组中的值填充。在这种情况下,我使用 JavaScript 的内置字符串连接来提供“包含” (小写)是列和like模式,或者用简单的英语,“找到我包含'this'的列namecharacter是参数变量值。我正在character从req.params(URL, so http://localhost:3000/users/startsWith/t) 中提取变量的参数值,因此将它与%参数的两端结合起来,它会返回包含字母 t 的所有值,因为它是此处的第一个(也是唯一的)字符在网址中。我知道这是一个非常晚的回应,但我想以更彻底的答案回应,以防其他人需要进一步分解。
| 归档时间: |
|
| 查看次数: |
7705 次 |
| 最近记录: |