如何选择非字母字符之间的特定单词?

时间:2018-04-17 15:50:22

标签: sql oracle plsql

我在列中有以下值。

TOM-TOM
TOMMY
TOM 12
123_TOM
SITTOM
TOM TIM
TOM,TIN
TOP TOM TON
TOMA
ATOM

如何只选择这些行:

TOM-TOM
TOM 12
123_TOM
TOM TIM
TOM,TIN
TOP TOM TON

但不是以下行

SITTOM
TOMMY
TOMA
ATOM

如果TOM之前或之后的一个字符是非字母,则应显示这些行。

1 个答案:

答案 0 :(得分:0)

您可以使用public int indexOf(Object target) { for (int i = 0; i < array.length; i++) { if (equals(target, array[i])) { return i; } } return -1; }

通过简单的查询来实现此目的
REGEXP_LIKE

以下是使用的正则表达式的细分:

  • select t.col from table t where regexp_like(t.col, '(^|[^a-zA-Z])TOM([^a-zA-Z]|$)') - 开始一行或非字母字符;
  • ^|[^a-zA-Z] - TOM;
  • TOM - 行或非字母字符的结尾。

如果您想考虑非英文字母,可以使用([^a-zA-Z]|$)代替:alpha:

a-zA-Z

在SQLFiddle上尝试:http://sqlfiddle.com/#!4/439b6/1