我有一个查询用'_'搜索名称,但它显示了表的所有记录。有人会告诉我我的剧本有什么问题。谢谢。
有我的SQL脚本:
declare @Name varchar(50)='_'
select * FROM products WHERE Name like @Name +'%'
_
是一个匹配任何角色的通配符。您可以选择另一个角色来逃避它。说:
WHERE Name like replace(@Name, '_', '$_') + '%' ESCAPE '$'
这可能会很麻烦,所以你可以使用不同的逻辑:
WHERE LEFT(Name, LEN(@Name)) = @Name
不幸的是,这种配方阻止了索引的使用。
根据MySQL指南,“_”字符在类似评估中使用时是通配符,请参阅https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html
如果你想匹配第一个字母,那么可能左边会更好,请参阅https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_left
要测试通配符的文字实例,请在其前面加上转义字符。例如。
\ _匹配一个_字符