在where子句中合并case语句

sqserrrh  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(528)

我的要求是:我需要提取所有公司的数据,这些数据在表中有相似的名称(前3个单词应该出现在名称中,可以在中间)作为输入公司名称。
我的查询对于name有3个以上单词的数据工作正常,但是对于小于或等于3个单词的数据它就失败了。
我不知道如何在where子句中加入条件。
我的问题如下

select regno,name from ereg 
where 
(name  like '%' +(
 SELECT SUBSTRING(name, 0, CHARINDEX(' ', name, CHARINDEX(' ', name, CHARINDEX(' ', name, 0)+1)+1)) matchingwrd
FROM ereg where regno='C2113-UPD01')+'%')

脚本如下

CREATE TABLE ereg(
    regnoINT, name VARCHAR(50)
);

INSERT INTO ereg (regno,name)  
values 
('C2113-UPD01','future company Ltd'),  
('C2223-UPD01','MY future company Ltd Corp'),  
('C2113-UPD01','Prime Private Furnishings housing Ltd  '),  
('C26903-UPD01','My Prime Private Furnishings Service   '),

例如,它对regno='c2113-upd01'工作正常,并给出输出-->>'c26903-upd01','my prime prime private venturations service'
但如果输入为“c2113-upd01”,我的查询将失败,无法获取“c223-upd01”公司数据

rlcwz9us

rlcwz9us1#

表数据插入脚本、数据和脚本似乎都不是从工作版本获取的。我得把一切都打扫干净。
为了得到这三个字,我在名字前面加了一个空格:你的询问还是给我带来了麻烦。但我是这样做的

;With cted as
(
Select regno, name, 
    SUBSTRING(name + ' ', 0, CHARINDEX(' ', name + ' ', CHARINDEX(' ', name + ' ', CHARINDEX(' ', name + ' ', 0)+1)+1)) as ThreeWords 
from ereg 
)
Select c1.regno, c1.name, c2.regno, c2.name 
from cted c1
inner join cted c2 on c2.name like    '%' + c1.ThreeWords + '%' and c1.regno <> c2.regno
Where  c1.regno='C2213-UPD01' -- or c1.regno='C2113-UPD01'

这是小提琴

相关问题