gpt4 book ai didi

mysql - ?喜欢(列 || '%')

转载 作者:可可西里 更新时间:2023-11-01 08:16:19 25 4
gpt4 key购买 nike

我可以有这样的条件吗:

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 子句之前时,问题就出现了。不允许吗?
如果不是,是否有任何解决方法?

最佳答案

查询:

SELECT * FROM table WHERE ? LIKE (col || '%');

可以重写为(Postgres 和 MySQL):

SELECT * FROM table WHERE col = left(?, length(col));

如评论所述,第一种形式也应该有效。不过,这可能很棘手,因为对于 LIKE具有特殊含义的字符 (至少 _%\) 列中的 必须转义。如果你想让它与 MySQL 和 Postgres 一起工作,你必须在这两种实现中观察特殊字符。因此,第二种形式在主体上更不容易出错

性能

这些查询都不能在 col 上使用索引,它们都不是 sargable .该问题可以重新评估为找到给定搜索模式 ? 的所有可能前缀,这可以像在 dba.SE 上的相关答案(对于 Postgres)中类似的方式进行优化:

关于mysql - ?喜欢(列 || '%'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26989488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com