我遇到了有关字符串匹配的问题。 我想要的是将表中的名称与包含相同名称+后面的端口名称的另一个名称相匹配。
eg.
TABLE:
name
1 abc
2 abc.8002
3 bcd
4 qwe
5 qwe.8002
Where the result would be another table of the form:
TABLE:
name
1 abc
2 abc.8002
3 qwe
4 qwe.8002
我已经用java代码描述了这个问题,如果你能帮我翻译一下,我将不胜感激。
List temp = new ArrayList<String>();
for (String name1 : Names) {
for (String name2 : Names) {
if (name1 != name2
&& name2.contains(name1.substring(0,2))) {
temp.add(name1);
}
}
}
最佳答案
进行自加入。使用 LIKE
来匹配名称。
select t1.name
from tablename t1
join tablename t2
on (t1.name like t2.name || '%' or t2.name like t1.name || '%')
and t1.name <> t2.name
||
是 ANSI SQL 连接。有些产品用 concat()
或 +
代替。
要“选择前 3 个字母部分重复的字母”,您可以使用 SUBSTRING()
而不是 LIKE
:
select t1.name
from tablename t1
join tablename t2
on substring(t1.name from 1 for 3) = substring(t2.name from 1 for 3)
and t1.name <> t2.name
这里也有 ANSI SQL 语法。一些 dbms 有 SUBSTR(t1.name, 1, 3)
或 LEFT(t1.name, 3)
或类似的。
关于java - SQL 匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42552149/