【问题标题】:Comparing wildcard strings - both sides of the comparison wildcarded比较通配符字符串 - 比较通配符的两边
【发布时间】:2011-04-07 19:22:42
【问题描述】:

问题:我有事件通过复合键到达。为了简化,假设关键是:

操作系统+主机名+一些细节

一些例子可能是:

  • 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 SELECTWIN+%LIKE WIN+%+DB+%。我可以用谷歌搜索的大多数解决方案只允许在一侧使用通配符。

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

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

这似乎很快就崩溃了,尽管我可能会列出可能的情况。

我正在研究一本关于正则表达式的书,并怀疑一旦我掌握了它们可能会派上用场。我在服务器上有一个公平的工具包,可以访问更多,所以我对大多数平台上的任何解决方案都持开放态度。

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

【问题讨论】:

    标签: sql string comparison wildcard


    【解决方案1】:

    我有 2 条建议:

    a) 考虑将大型订阅字符串分解为各个部分。所以你以 3 列结束:OS、HOSTNAME 和 DETAIL。然后可以查询... FROM SUBSCRIPTIONS WHERE event LIKE OS||'%' AND event LIKE '%'||HOST||'%' AND event LIKE '%'||DETAIL

    b) 你有 8 种情况:没有通配符,只有 OS 作为通配符,只有 HOST 作为通配符,只有 DETAIL 作为通配符,OS 和 HOST 作为通配符,OS 和 DETAIL 作为通配符,HOST 和 DETAIL 作为通配符,所有 3 种作为通配符.对于每一个,您都可以编写一个单独的查询来处理它。这将按照您的描述运行。如果你有更多的案例,这将是一个糟糕的解决方案,因为它不容易扩展。

    【讨论】:

    • b - 实际上它有 8 个字段,所以有 256 个选项。然后,这可以很容易地在代码中构建并在一夜之间运行。感谢您的意见 - 我会考虑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多