【问题标题】:Sql Server 2008 - Split Parameter by Space, Return Records LIKE All Split ResultsSql Server 2008 - 按空格分割参数,返回记录像所有分割结果
【发布时间】:2012-04-20 13:30:52
【问题描述】:

我将 @Description 参数传递给存储过程 (VARCHAR)。参数可能类似于the book。我想返回列包含thebook 的记录。

这些记录将返回:

  • the green book
  • the huge orange book

我有一个 split 函数可以将 @Description 参数按空格进行拆分,但我不知道如何将其包含在 where 子句中...我还需要在 @Description 参数为 @987654329 时忽略它@。

免责声明:如果之前有人问过这个问题,我深表歉意......我搜索了 找了一阵子也没找到。

【问题讨论】:

  • 您是否需要考虑标点符号和/或部分匹配? '%the%book%' 将匹配您的示例,但也匹配 'theology book' 例如。其他可能的解决方案可能与'the, book' 不匹配(弱示例,但我能想到的最好的)。您能否详细说明需要找到什么,不应该找到什么?
  • 我需要找到匹配@Description 中每个单词的记录...所以the bookbook theaatheaa aabookaa。这些都会回来的。
  • %the%book% 让我更接近...但我还需要匹配未返回的book the

标签: sql sql-server-2008 split


【解决方案1】:

好吧,如果你想得到一个包含参数中所有单词的结果,你可以这样做:

SELECT A.YourFields
FROM YourTable A
INNER JOIN (SELECT *, COUNT(*) OVER() Total FROM dbo.Split(@Description)) B
ON A.YourField LIKE '%' + B.Data + '%'
GROUP BY A.YourFields
HAVING COUNT(*) = MAX(B.Total)

【讨论】:

  • 因为您使用的是LIKE '%' + B.Data + '%',而不考虑部分匹配、标点符号等,这实际上与LIKE '%the%book%' 非常相似;同样的结果,更多的代码和更多的 CPU 时间。
  • 我试过这个......问题是当@Description 为空时。我的一个查询也有 group by 另一个原因,所以没有工作。
  • @Martin - 根据您对问题的评论,这可能是您的答案。但是把它放在一个子查询中。 SELECT * FROM yourQuery INNER JOIN (LamaksQuery) AS books ON books.id = yourTable.id WHERE blah
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2019-08-14
  • 2013-12-29
  • 2010-11-02
  • 1970-01-01
  • 2013-10-11
  • 2018-03-22
相关资源
最近更新 更多