【问题标题】:Regular Expression (RegEx) to find a particular word in any part of a string but has a character limit正则表达式 (RegEx) 在字符串的任何部分查找特定单词但有字符限制
【发布时间】:2021-11-23 17:32:10
【问题描述】:

我想在 SQL 的“LIKE”函数中使用正则表达式来搜索包含特定单词的字符串。

例如,假设我有一个文件夹名称列表(来自笔记本电脑),我想搜索所有包含“旧”一词的文件夹。我想要的结果示例:

Folder Name
Old Templates
old Archives
temp - old

但是,当我使用:

WHERE folder LIKE '%Old%'

显然,我得到以下结果:

Folder Name
Old Templates
old Archives
temp - old
Harold Jenkins
Jerry Oldfield

我只想使用正则表达式在字符串的任何阶段搜索单词“Old”,但它只搜索 3 个字符并检索完整的字符串。

只是想知道是否有人可以帮助我 - 谢谢!

【问题讨论】:

  • 我不明白这个问题。你能展示你想要的结果吗?
  • 顺便说一句,LIKE 不是正则表达式。正则表达式匹配REGEX或RLIKE。
  • 你是在问如何只匹配整个单词,而不是部分单词,所以它不会匹配harold?
  • @Barmar 感谢您的回复。好吧,有人告诉我,例如,如果您使用“[a-z]”打开,则可以在 LIKE 语句中包含 RegEx。基本上,顶部的表格是我想要的结果,但我得到的是底部表格的结果。例如,我想搜索“老”这个词,但不让它在“哈罗德”中返回“老”。
  • @Barmar 是的,这就是我想说的,但我做得不太好哈哈

标签: sql tsql sql-like


【解决方案1】:

一般来说,like 运算符的功能有限,肯定比正则表达式少。但是,您需要的可以通过

  1. 在搜索字符串的开头和结尾添加一个空格以确保它是不同的单词
  2. 对目标字符串做同样的事情,这样它也会在边缘匹配:

where ' '+folder+' ' like '% old %'

【讨论】:

  • 最终,您可以在模式中使用否定字符类而不是空格作为正则表达式单词边界的 polyfill:like '%[^a-zA-Z]old[^a-zA-Z]%'。 (或[^a-zA-Z0-9])
  • @Barmar:问题被标记为 tsql。
  • 糟糕,抱歉,没注意到。我一般都关注mysql。
  • @Barmar:没关系,但为了让你原谅,看看我最后的回答。
  • 太好了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多