java - SQL 匹配字符串

标签 java sql string translation

我遇到了有关字符串匹配的问题。 我想要的是将表中的名称与包含相同名称+后面的端口名称的另一个名称相匹配。

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/

相关文章:

java - 在 Spring MVC 、 Hibernate 、 Oracle 项目中实现规则引擎所需的设计指南

php - 在段落中插入数字 ID(PHP/MySQL DB 查询)

如果分隔符存在,则 SQL 选择子字符串,否则给出完整字符串

java - 返回数组的第一个结构体为空

java - 如何获取 FileChannel.transferFrom 在写入过程中写入的字节数

sql - 不确定如何从一个表中获取数据并将其移动到另一个表中

mysql - 外连接多个表

string - 将字符串转换为过程

c# - 如何将数字字符串排序为数字?

java - 更新渲染的树单元