我们假设我有一个名为table
的表,它有一个名为path
的列,path
中的字符串格式如下所示
row path
1 /path1/aa/bg/c/da
2 /path1/ab/v
3 /path1/a/ba/ca
如您所见,每个细分由char /
分隔。
如何使用where
格式化like
中的条件,以便返回的唯一行为row 2
2 slashes
。
我试过了
DB::table('table')->where('path','LIKE','/path1/%/%')->get()
但上面的查询将返回由于最后一个%
而导致的所有行。如何在最后/
之后排除%
,以便在结果中不包含最后/
之后的字符%
的记录?
答案 0 :(得分:1)
如果您正在寻找匹配的一个角色:
DB::table('table')->where('path','LIKE','/path1/_/_')->get()
“test%”匹配
之后的所有字符“%test”匹配
之前的所有字符“_”匹配一个字符
ELSE如果您匹配的字符串长度是可变的,则只能使用正则表达式
select * from table where path REGEXP '\/path1\/[a-zA-Z0-9_]+\/[a-zA-Z0-9_]+'
匹配特殊字符的更通用匹配:
select * from table where path REGEXP '\/path1\/.+\/.+'