【发布时间】:2020-04-03 08:14:08
【问题描述】:
我遇到了一个问题,我收到的数据集格式不正确,例如 EG fullName 列,并且没有名称细分我想搜索以给定字母 EG 'J' 开头的任何名称的位置
这是我的声明,但我只是收到关于意外REGEXP的投诉
SELECT * FROM `Officers` WHERE `fullName` REGEXP '.*\sJ.*';
不幸的是,在 MariaDB 中有什么方法可以做到这一点,名字不是固定的字数,有些只有 2 个名字,有些是 6 个名字长,所以有 4 个中间名。
【问题讨论】:
-
试试
REGEXP '\\bJ' -
*\sJ*不是正则表达式,它充其量是一个通配符模式。您的意思是使用.*而不是单个星号。.匹配任何字符,*表示零次或多次。至于\s,你/可能/需要转义反斜杠,使整个表达式.*\\s.*J;但你可能想接受 Wiktors 的建议...... -
星星之前确实有点我只是在输入 SO 时写错了,请问 \\b 是做什么的我可以看到它的最终结果是什么,但它的定义是什么从未见过以前呢?
-
其实我有点疑惑:如果只有第一个词必须以
J开头,那肯定有非正则表达式的方式来实现你想要的。\\b将匹配单词边界,并且可能匹配位于第二个、第三个等名称开头的J。试试WHERE LEFT(TRIM(col), 1) == "J" -
第一个以
J开头的单词很容易WHERE fullName LIKE 'J%'或WHERE SUBSTRING(fullName, 0, 1) = "J'但单词边界是困难的一点但是谢谢,我现在已经在正则表达式中了解了\b:) 如果你可以使它成为我将标记为正确的答案:)