SELECT REGEXP_REPLACE (FIRST, '[^a-zA-Z0-9]+', '', 'g')
FROM example
WHERE LAST LIKE '%Belanger%'
'first'是varchar2字段。我只是想从“第一个字段”中删除非字母数字字符。
答案 0 :(得分:1)
where last LIKE 'Belanger'
仅返回last
等于"Belanger"
的行。添加适当的通配符
WHERE last LIKE '%Belanger%' -- contains 'Belanger'
或
WHERE last LIKE 'Belanger%' -- starts with 'Belanger'
或
WHERE last LIKE '%Belanger' -- ends with 'Belanger'
或(不喜欢)
WHERE last = 'Belanger' -- equals 'Belanger'
看来regexp_replace
的语法是错误的。语法:
REGEXP_REPLACE( string, pattern [, replacement_string [, start_position
[, nth_appearance [, match_parameter ] ] ] ] )
最后一个参数是match_parameter
,必须在start_position
和nth_appearance
之前。有效的匹配参数为(根据TechNet REGEXP_REPLACE Function):
'c'执行区分大小写的匹配。
'i'执行不区分大小写的匹配。
'n'允许句点字符(。)匹配换行符。
默认情况下,句点是通配符。
假设'm'表达式有多行,其中^是一行的开始,$是
的结尾 一行,无论这些字符在表达式中的位置如何。默认情况下,假定表达式为单行。
'x'空格字符将被忽略。默认情况下,空格字符会像任何
一样进行匹配 其他字符。
但是,如果没有此'g'
参数(无论打算做什么),这应该可以工作:
regexp_replace(first, '[^a-zA-Z0-9]+', '')
答案 1 :(得分:1)
您不需要在这个地方private static boolean test(List<String> actualList, List<String> expectedList) {
Pattern p = Pattern.compile("\\s+");
Set<String> set = actualList.stream()
.flatMap(p::splitAsStream)
.collect(Collectors.toSet());
return expectedList.stream().allMatch(set::contains);
}
。以下查询就足够了。在@kfinity提供的文档中进行检查
'g'
答案 2 :(得分:0)
尝试以下操作(将不在a-z
或0-9
范围内的任何内容替换为null,从位置1开始,所有出现的情况,不区分大小写):
regexp_replace(first, '[^a-z0-9]+', '', 1, 0, 'i')
或这个(替换POSIX [:alnum:]
(字母数字)character class中的任何内容):
regexp_replace(first, '[^[:alnum:]]')