SQL查找缩写值

时间:2018-05-23 11:09:35

标签: sql sql-server sql-like

所以我宣布了一张桌子:

  DECLARE @VTable TABLE (ColtoAdj VARCHAR(50),HeadlineDescription 
  VARCHAR(50),HeadlineDescriptionGroup VARCHAR(50));

  INSERT INTO @VTable VALUES ('Neopla','Neoplasia','Cancer');
  INSERT INTO @VTable VALUES ('Metasta','Metastases','Cancer');
  INSERT INTO @VTable VALUES ('CES','CES','Cauda Equina');
  INSERT INTO @VTable VALUES ('CES-I','CES-I','Cauda Equina');

然后在主表的Outter应用中使用,以查找标题描述和标题描述组。

  OUTER APPLY (
  SELECT TOP 1
  vt.ColtoAdj,
  Vt.HeadlineDescription,
  Vt.HeadlineDescriptionGroup
  FROM @VTable AS vt
  WHERE cmd.Headline LIKE ('%' + vt.ColtoAdj + '%')

对于我的大部分数据而言,它工作正常,因为很多vt.ColtoAdj查找字是唯一的,例如有一个hyphon等,所以只是拉。问题是CES值。这可能是255个字符标题中的任何位置。所以它目前正在采取类似于" BraCES"并错误地添加它。我试图为它插入2个值' CES'或者' CES '只是得到缩写但这仍然抓住以其结尾或开始的单词。无论如何,这个值在表中我可以让它自己找到3个字母,但也搜索其他的完整单词?

这可能是一个不行的情况,仅仅因为它的功能和单词查找你不能保证100%的准确性,但我想我会检查。

2 个答案:

答案 0 :(得分:2)

如果您正在寻找单词边界并且单词以空格为界,您可以使用:

WHERE ' ' + cmd.Headline + ' ' LIKE '% ' + vt.ColtoAdj + ' %'

答案 1 :(得分:0)

我只能想到一个案例解决方案:

WHERE 
(
    (cmd.Headline LIKE ('%' + vt.ColtoAdj + '%') and vt.ColtoAdj<>'CES')
    OR
    (cmd.Headline='CES' and vt.ColtoAdj='CES')
)