【发布时间】:2019-09-20 19:47:47
【问题描述】:
我有一个搜索功能,可以在数据库中搜索与 query_string 匹配的单词。目前,您可以按街道或地点、USRN 等搜索,例如,如果您同时输入街道和地点,它不会找到任何内容,因为街道和地点是同一张表的两个单独的列。但是,如果我输入其中任何一个,查询将返回相关建议的列表。我怎样才能做到这一点不会抵消另一个?
谢谢
这是我的查询:
SELECT USRN,
RTRIM(SD)+', '+RTRIM(NT.TOWN_NAME) AS FEATURE_NAME,
KEYWORDS = CAST(USRN AS VARCHAR(15))+' '+RTRIM(SD)+''+RTRIM(NL.LOCALITY_NAME)+' '+RTRIM(NT.TOWN_NAME)+''+RTRIM(NA.AUTHORITY_NAME)
FROM NS
INNER JOIN NT ON NT.TOWN_UID = NS.TOWN_UID
INNER JOIN NL ON NL.LOCALITY_UID = NS.LOCALITY_UID
INNER JOIN NA ON NA.AUTHORITY_UID = NS.AUTHORITY_UID
WHERE CAST(USRN AS VARCHAR(15))+' '+RTRIM(SD)+' '+RTRIM(NL.LOCALITY_NAME)+' '+RTRIM(NT.TOWN_NAME)+''+RTRIM(NA.AUTHORITY_NAME) LIKE '%'+@SEARCH_STRING+'%';
编辑:经过一番思考,我认为可以通过将 query_string 拆分为单个单词,然后对每个拆分单词动态应用 LIKE 语句。
【问题讨论】:
-
对不起,DBMS 是 Sql Server Management Studio
-
除了您询问的那些之外,您的搜索字符串中的所有这些列(usrn、descriptor、town_name、authority_name)是否真的有值?
-
是的,所有这些列中都有值。为了简单起见,我没有提到它们
-
我没有问这些列中是否有值,我问的是值 from 这些列是否是搜索字符串的一部分。也就是说,搜索时是否必须包含 usrn、descriptior 等内容?
-
是的,用户需要能够通过 USRN(代表每条街道的数字)、街道描述符(街道名称)、地区和城镇名称进行搜索。目前,用户只能键入其中一个,如果他键入它们的组合,则搜索结果不会返回任何内容。理想情况下,用户需要能够输入一个或多个。
标签: sql sql-server tsql select sql-like