我有一列,我想把它分解成单独的单词,在文本框上进行"自动建议"。多亏了这篇文章,我才得以做到这一点:http://discourse.bigdinosaur.org/t/sql-and-database-splitting-a-column-into-individual-words/709/45
然而,结果中有我不想要的字符,比如"/'等。我有一个数据库函数,当我想过滤掉字符时,我会使用它,但我不知道如何合并2并使其工作。
Here's the splitting code:
;WITH for_tally (spc_loc) AS
(SELECT 1 AS spc_loc
UNION ALL
SELECT spc_loc + 1 from for_tally WHERE spc_loc < 65
)
SELECT spc_loc into #tally from for_tally OPTION(MAXRECURSION 65)
select substring(name, spc_loc, charindex(' ', name + ' ', spc_loc) - spc_loc) as word
into #temptable
from #tally, products
where spc_loc <= convert(int, len(name))
and substring(' ' + name, spc_loc, 1) = ' '
然后,以下是我如何查看表格:
select distinct word from #temptable order by word
下面是我如何在其他查询中调用数据库函数:
SELECT * INTO #Keywords FROM dbo.SplitStringPattern(@Keywords, '[abcdefghijklmnopqrstuvwxyz0123456789-]')
其中@Keywords是要筛选的字符串。
我已经尝试了所有我能想到的,通过dbo过滤第一个查询。SplitStringPattern函数
即:
select substring(dbo.SplitStringPattern(name, '[abcdefghijklmnopqrstuvwxyz0123456789-]'), spc_loc, charindex(' ', name + ' ', spc_loc) - spc_loc) as word
into #temptable
from #tally, products
where spc_loc <= convert(int, len(name))
and substring(' ' + name, spc_loc, 1) = ' '
但我得到"既找不到列"dbo",也找不到用户定义的函数或聚合"dbo。SplitStringPattern",或者名称不明确。"
我需要对此进行优化,因为此查询需要非常快速地返回结果。
或者,如果有更好的方法,我愿意接受建议。
在调用"数据库函数"之前,创建一个T-SQL函数来过滤掉不需要的字符。以下网页链接应该会有所帮助。
- MSDN创建函数(Transact-SQL)
- 如何在MS SQL Server(T-SQL)中删除字符串中的特殊字符