我需要编写sql查询以从表中获取类似的记录。它有100条记录,具有不同的值。但是有些记录具有相似的名称,相似的名称以大写或简单开头。
ex-我想获得所有具有相似名称的相似记录。
Student_no | student_Name | Subject |class
1 | Abc | Java | 1
2 | Abc | Java | 1
3 | xyz | AngularJS | 2
4 | xyz | AngularJS | 2
5 | Abc Def | SpringBoot| 3
答案 0 :(得分:0)
在您的实例中,这样的语句:
SELECT * FROM TABLE WHERE UPPER(student_Name) like UPPER('xyz')
将所有student_Name
值都转换为大写,然后检索所有大写(或全部)“ XYZ”值。
如果并非所有名称都像“ xyz”(或者某些名称是“ xyz1”,“ 1_xyz”或“ ABCXYZDEF”)一样,则需要使用like
和%
来代表任意数量的缺少值:
SELECT * FROM TABLE WHERE UPPER(student_Name) like UPPER('%xyz%')
有关更多信息,请参见附件链接:SQL- Ignore case while searching for a string
答案 1 :(得分:0)
使用EXISTS和LIKE运算符:
select t.*
from tablename t
where exists (
select 1 from tablename
where
Student_no <> t.Student_no
and (
student_Name like concat(t.student_Name, '%')
or
t.student_Name like concat(student_Name, '%')
)
)
请参见demo。
结果:
| Student_no | student_Name | Subject | class |
| ---------- | ------------ | ---------- | ----- |
| 1 | Abc | Java | 1 |
| 2 | Abc | Java | 1 |
| 3 | xyz | AngularJS | 2 |
| 4 | xyz | AngularJS | 2 |
| 5 | Abc Def | SpringBoot | 3 |