【发布时间】:2020-06-08 20:59:59
【问题描述】:
我的要求如下:我需要提取所有在表中名称相似的公司数据(名称中的前3个单词应该出现在中间,可以在中间)作为输入的公司名称。
我的查询对于名称超过 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 Private Furnishings Service
但如果输入是 'C2113-UPD01' 我的查询失败并且无法获取 'C2223-UPD01' 公司数据
【问题讨论】:
-
仅供参考,它是
case expression而不是case statement -
列“regno”被定义为int。你的价值观是char。你的例子有问题。
-
“前 3 个单词”是什么意思?至少你应该有一个排序标准。也许窗口函数会有所帮助?
-
请提供样本数据和想要的结果。
标签: sql sql-server