Regexp_like 检查字符串中的符号

Regexp_like check for symbol in string

如果我想检查字符串是否包含 @ 符号,我可以写类似

的东西
REGEXP_LIKE(source_column,'@')

REGEXP_LIKE(source_column, '.*@.*')

这两种形式有什么区别? 为什么即使字符串具有 @ 以外的其他符号,REGEXP_LIKE(source_column,'@') returns 仍为真?例如它匹配 mail@mail.com12@

自然 '@' 对我来说看起来 完全 字符串匹配,而 '.*@.*' 我读作 'any string with that symbol'.

这三个功能完全相同,如果 @ 符号之前或之后有任意数量的字符,则 return 为真:

REGEXP_LIKE(source_column,'@')
REGEXP_LIKE(source_column,'.*@.*')
REGEXP_LIKE(source_column,'^.*@.*$', 'n')

(如果你有多行数据,最后一个例子需要'n'匹配参数,否则.通配符将无法匹配换行符,匹配将失败.)

如果您想要精确匹配,请查找紧接符号前后的字符串开头 (^) 和字符串结尾 ($):

REGEXP_LIKE(source_column,'^@$')