在用户输入之前匹配特定字符串
Match specific string before user input
我有以下字符串:
SDZ420-1241242,
AS42-9639263,
SPF3-2352353
我想在搜索时“转义”SDZ420- 部分,只使用最后一位数字进行搜索,到目前为止,我已经尝试了 RLIKE '^[a-zA-Z\d-]'
这行得通,但我对如何添加下一位数字感到困惑 (用户输入,对它说 1241242
)。我不能使用 LIKE '%$input'
,因为即使我只输入 '242'
作为搜索字符串,那也会 return 一行。
简而言之,'1241242'
的用户输入应该 return 带有 'SDZ420-1241242'
的行。除了创建一个仅包含数字的单独 table 之外,还有其他方法吗?
请注意,不要跳过一些疯狂的圈套,此搜索需要命中 table 中的每一行;如果你有一个索引,它不会使用那个(通常使用索引,假设它是正确的类型,当你开始搜索时,通常只使用 LIKE 'needle%'
而不是 RLIKE
。如果这是一个问题,单独存储数字,然后在其上放置索引,可能是解决您问题的最简单方法。
要查询最后几位,为什么不呢:
SELECT * FROM foo WHERE colName LIKE ?
使用您的编程语言制作的字符串:
String searchTerm = "%-" + digits;
您也可以将数字作为字符串传入并使用:
where substring_index(colname, '-', -1) = ?
这不需要更改应用程序代码中的值。
我有以下字符串:
SDZ420-1241242,
AS42-9639263,
SPF3-2352353
我想在搜索时“转义”SDZ420- 部分,只使用最后一位数字进行搜索,到目前为止,我已经尝试了 RLIKE '^[a-zA-Z\d-]'
这行得通,但我对如何添加下一位数字感到困惑 (用户输入,对它说 1241242
)。我不能使用 LIKE '%$input'
,因为即使我只输入 '242'
作为搜索字符串,那也会 return 一行。
简而言之,'1241242'
的用户输入应该 return 带有 'SDZ420-1241242'
的行。除了创建一个仅包含数字的单独 table 之外,还有其他方法吗?
请注意,不要跳过一些疯狂的圈套,此搜索需要命中 table 中的每一行;如果你有一个索引,它不会使用那个(通常使用索引,假设它是正确的类型,当你开始搜索时,通常只使用 LIKE 'needle%'
而不是 RLIKE
。如果这是一个问题,单独存储数字,然后在其上放置索引,可能是解决您问题的最简单方法。
要查询最后几位,为什么不呢:
SELECT * FROM foo WHERE colName LIKE ?
使用您的编程语言制作的字符串:
String searchTerm = "%-" + digits;
您也可以将数字作为字符串传入并使用:
where substring_index(colname, '-', -1) = ?
这不需要更改应用程序代码中的值。