我有一个名为关键字的表,其中包含100个关键字,从一个单词到几个单词,全部用逗号分隔。例如:
change of name, asb, repair, reporting violence
这些关键字按类别分组。
我们的用户可以在自由文本字段中输入任何文本。例如:
Caller rang to to speak to ASB about violence
如何使用SQL读取自由文本字段中的单词以检查关键字表中的任何匹配项?所以在上面的示例中,我希望它能够获取ASB,并且暴力存储在关键字表中。
如果只使用一个单词,如ASB,我还希望它能带回结果。
重要的是要注意,任何单词都可以输入到自由文本字段中。
我正在使用Microsoft SQL Server 2014 SP2。
由于
答案 0 :(得分:0)
由于您尚未指定表名;我会创造一些。请运行:
create table dbWords (id int not null identity, words varchar(100), primary key (id))
insert into dbWords (words) values ('change of name, asb, repair, reporting violence')
CREATE FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
ENd
然后运行:
select * from dbWords inner join (
select * from dbo.fnSplitString('change of name, change of dob', ',')
) as splitdatatable on dbwords.words like '%,' + splitdata+ ',%'
or dbwords.words like '%,' + splitdata
or dbwords.words like splitdata + ',%'
上面SQL语句中传递给函数的文本是用户输入的文本。