Сравнение строк с подстановочными знаками - обе стороны сравнения с подстановочными знаками - PullRequest
2 голосов
/ 07 апреля 2011

Проблема: у меня есть события с составным ключом. Для упрощения, скажем, ключ:

OS + имя хоста + somedetail

Некоторые примеры могут быть:

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

У нас есть различные команды, которые могут подписаться на них с помощью подстановочной строки SQL. Например, администратор Windows может подписаться на WIN+%, а администратор БД может подписаться на WIN+%+DB+%.

Мы сделали стержень для наших собственных спинок, не прибегая к этому с самого начала, но это был классический случай, чтобы сначала он работал, а затем улучшал его, когда мы можем. По соображениям производительности я хочу минимизировать количество перекрывающихся подписок. Данные представлены как в Excel, так и в таблице MS SQL. Проблема в том, что хотя SQL-сервер согласится WIN+% - это LIKE WIN+SERVER1+DB+PAY, похоже, он не согласен с тем, что WIN+% - это LIKE WIN+%+DB+% в SQL SELECT. И большинство решений, которые я могу использовать в Google, позволяют использовать подстановочные знаки только с одной стороны.

Я думаю, что я могу кое-что из этого, сломав одну сторону сравнения подстановочного знака (который может быть более сложным) в каждом подстановочном знаке.

Например WIN+%+DB+% становится SELECT field WHERE field LIKE 'WIN+%" and field LIKE '%+DB+%'

Кажется, что это довольно быстро сломается, хотя, возможно, я мог бы составить список вероятных случаев.

Я работаю над книгой о регулярных выражениях и подозреваю, что они могут быть полезны, как только я получу лучший контроль. У меня есть хороший набор инструментов на сервере с доступом к большему количеству, поэтому я открыт для любых решений на большинстве платформ.

В случае, если кому-то интересно - каждый матч дает билет, поэтому на 2 матча будет получено 2 билета, и они могут не пересекаться, вызывая дополнительную работу. Это происходит в нескольких центрах обработки данных, и у нас есть несколько тысяч подписок - в основном, автоматически генерируемых «решением проблемы». С другой стороны, это заставляет меня работать.

1 Ответ

1 голос
/ 12 мая 2011

У меня есть 2 предложения:

a) Подумайте о том, чтобы разбить большие строки подписки на их части.Таким образом, вы заканчиваете с 3 столбцами: OS, HOSTNAME и DETAIL.Затем вы можете запросить ... FROM SUBSCRIPTIONS WHERE event LIKE OS||'%' AND event LIKE '%'||HOST||'%' AND event LIKE '%'||DETAIL.

b) У вас есть 8 случаев: нет подстановочного знака, только ОС в качестве подстановочного знака, только HOST в качестве подстановочного знака, только DETAIL в качестве подстановочного знака, OS и HOST в качестве подстановочного знака, OS и DETAIL в качестве подстановочного знака, HOST и DETAIL как подстановочный знак, все 3 как подстановочный знак.Для каждого из них вы можете написать отдельный запрос, обрабатывающий его.Это будет работать так, как вы описали.Это было бы плохим решением, если у вас гораздо больше дел, потому что его нелегко расширить.

...