我有一个其中包含医学描述的sql server数据库。我已经在上面创建了全文索引,但是我仍在弄清楚它是如何工作的。
最简单的例子是是否有Hypertensive heart disease
现在,他们希望能够输入hyp hea
作为搜索词并将其返回。
所以从我阅读的内容来看,我的查询似乎需要类似
DECLARE @Term VARCHAR(100)
SET @Term = 'NEAR(''Hyper*'',''hea*'')'
SELECT * FROM Icd10Codes WHERE CONTAINS(Description, @Term)
如果我将通配符用于高血压和心脏,并输入完整的单词,但是在其中添加通配符将不返回任何内容。
如果有什么不同,我正在使用Sql Server 2017
答案 0 :(得分:0)
这将起作用:
SELECT * FROM Icd10Codes where SOUNDEX(description)=soundex('Hyp');
SELECT * FROM Icd10Codes where DIFFERENCE(description,'hyp hea')>=2;
答案 1 :(得分:0)
您可以尝试类似的陈述。您可以找到详尽的解释here。
像这样:
SELECT * FROM Icd10Codes WHERE Icd10Codes LIKE '%hyp hea%';
然后使用一个变量代替将String放在其中。
如果您需要搜索分开的部分单词,例如在搜索项数组中,由于需要动态构建SQL语句,因此会有些棘手。
MSSQL提供了一些用于全文搜索的功能。您可以找到那些here。其中之一是CONTAINS
关键字:
SELECT column FROM table WHERE CONTAINS (column , 'string1 string2 string3');
答案 2 :(得分:0)
这是一个奇怪的语法问题,没有引起错误,但是使搜索无法进行。
我将其更改为
SELECT * FROM Icd10Codes where CONTAINS(description, '"hyper*" NEAR "hea*"')
这里的关键是我需要双引号"
而不是单引号。我以为是两个单引号,第一个是转义第二个,但是实际上是双引号。上面的查询返回的结果完全符合预期。