将列拆分为单个单词,然后过滤结果

时间:2015-02-17 21:12:14

标签: sql sql-server database

我有一个专栏,我希望将其分成单个单词,以便自动建议"在文本框上。由于这篇文章,我能够做到这一点: 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) = ' '

但是我得到了#34;找不到任何一列&#34; dbo&#34;或用户定义的函数或聚合&#34; dbo.SplitStringPattern&#34;,或名称不明确。&#34;

我需要对此进行优化,因为此查询需要非常快速地返回结果。

或者,如果有更好的方法,我可以接受建议。

1 个答案:

答案 0 :(得分:0)

创建一个T-SQL函数,在调用“数据库函数”之前过滤掉不需要的字符。以下网页链接应该有所帮助。