比较通配符字符串 - 比较通配符的两侧

时间:2011-04-07 19:22:43

标签: sql string comparison wildcard

问题:我有使用复合键到达的事件。为简化起见,假设关键是:

  

OS +主机名+ somedetail

一些例子可能是:

  • WIN+SERVER1+DB+PAY
  • WIN+SERVER2+CPU_HIGH

我们有各种团队可以使用SQL通配字符串订阅这些团队。例如,Windows管理员可能订阅WIN+%,而DBA可能订阅WIN+%+DB+%

我们已经为自己的背部制造了一根杆,但并没有在开始时将其固定下来,但这是一个经典的例子,它首先让它工作,然后让它在我们可以的时候更好地工作。出于性能原因,我希望尽量减少重叠订阅的数量。数据都在excel和MS SQL表中。问题是虽然SQL服务器会同意 WIN+% LIKE WIN+SERVER1+DB+PAY似乎不同意SQL WIN+%中的LIKE WIN+%+DB+%SELECT。我可以google的大部分解决方案只允许使用通配符。

我认为我可以通过在每个通配符中打破通配符比较的一侧(可能更复杂)来实现其中的一部分。

例如WIN+%+DB+%变为SELECT field WHERE field LIKE 'WIN+%" and field LIKE '%+DB+%'

这似乎很快就会崩溃,尽管我可能会列出一些可能的案例。

我正在写一本关于正则表达式的书,并怀疑一旦我获得更好的抓地力它们可能会有用。我在服务器上有一个公平的工具包,可以访问更多,所以我可以在大多数平台上使用任何解决方案。

如果有人感兴趣 - 每场比赛产生一张票,那么2场比赛将产生2张票,他们可能不会交叉推荐引起额外的工作。这涉及多个数据中心,我们有数千个订阅 - 主要由“部分问题”“解决方案”自动生成。从好的方面来说,它让我继续工作。

1 个答案:

答案 0 :(得分:1)

我有2条建议:

a)考虑将大订阅字符串分解为各自的部分。所以最后有3列:OS,HOSTNAME和DETAIL。然后,您可以查询... FROM SUBSCRIPTIONS WHERE event LIKE OS||'%' AND event LIKE '%'||HOST||'%' AND event LIKE '%'||DETAIL

b)你有8种情况:没有通配符,只有操作系统作为通配符,只有HOST作为通配符,只有通用卡作为通信卡,操作系统和主机作为通配符,操作系统和详细信息作为通配符,HOST和DETAIL作为通配符,所有3都作为通配符。对于每一个,您可以编写一个单独的查询来处理它。这将按照您的描述运行。如果你有更多的情况导致它不容易扩展,那将是一个糟糕的解决方案。