如果我有一个包含文字的表格
create table my_table(
id integer primary key,
para text
);
我想选择包含特定字段的所有条目
SELECT * FROM my_table WHERE text LIKE '%searchtext%';
所以它会给我所有包含“searchtext”的字段。在postgresql中是否有像contain(...)
这样的聚合函数/过程来执行相同的操作。
SELECT * FROM my_table WHERE contains(text, 'searchtext');
我想要上面的行为,因为我正在使用预准备语句来提供参数,例如字符串,例如WHERE text = ?
然后我在?
。
答案 0 :(得分:1)
要在PreparedStatement中使用带有参数的通配符,您需要将该参数值与通配符连接:
SELECT *
FROM my_table
WHERE para LIKE concat('%', ?, '%');
以上不易受SQL注入攻击。即使您确实将abc%' OR '%def
作为参数传递,使用的条件也是LIKE '%abc%'' OR ''%def'
另一种可能性是使用strpos()
SELECT *
FROM my_table
WHERE strpos(para, ?) > 0;