【发布时间】:2014-11-18 08:12:36
【问题描述】:
我可以有这样的条件:
SELECT * FROM table WHERE ? LIKE (column || '%')
? 是一个字符串参数值。例如,当列等于/admin/products
?应该返回true
/admin/products/1
/admin/products/new
/admin/products/1/edit
这可能吗?
更新:添加了测试用例。
基本上,where 子句会呈现如下:
1. ? LIKE (column || '%')
2. '/admin/products/1' like ('/admin/products' || %)
3. '/admin/products/1' like ('/admin/products%')
但它总是对我返回 false。
这些查询工作正常:
column = '/admin/products' --returns true
column = '/admin/products/1' --returns false
column LIKE '/admin/prod%' --returns true
当我将参数? 放在LIKE 子句之前时,就会出现问题。不允许吗?
如果不是,是否有任何解决方法?
【问题讨论】:
-
AFAIK 表名和列名不能被参数替换。
-
这听起来像是前端/实现问题,而不是数据库问题。
-
@Scotch 我们实际上是在我们的系统上实现一个用户角色。我们将基本页面的 URL 放在数据库中,并在管理站点的基本控制器中对其进行验证,这样我们就不会有任何冗余代码。
-
SQL中
+是加数字的运算符,不是字符连接的(连接字符串的运算符是||) -
@a_horse_with_no_name 已注意,修复了有关 SQL 字符串连接符号的问题。
标签: mysql sql postgresql pattern-matching prefix