Fuente
it_skills_ua | SQL задача:В таблиці logs по колонці log_text знайти всі рядки де зуст...
2 029 Vistas/Alcance
2025-07-26 15:37
Mensaje №960
SQL задача:В таблиці logs по колонці log_text знайти всі рядки де зустрічається IP адреси від 192.168.0.201 до 192.168.0.204. В колонці log_text маємо текст такого формату: «User connected from 192.168.0.202 at PC».Варіант рішення через LIKE:SELECT *FROM logsWHERE (log_text LIKE '%192.168.0.201%' OR log_text LIKE '%192.168.0.202%' OR log_text LIKE '%192.168.0.203%' OR log_text LIKE '%192.168.0.204%');
Варіант рішення через REGEXP_LIKE:SELECT *FROM logsWHERE REGEXP_LIKE(log_text, '192\.168\.0\.20[1-4]');
Головний мінус LIKE в тому, що при пошуку наприклад 100 IP адрес, треба буде прописувати 100 LIKE умов через OR. Але LIKE швидший в на великих обʼємах.Головний мінус REGEXP_LIKE, це те, що на великих обʼємах скоріш за все буде працювати довше. Але REGEXP_LIKE компактний та гнучкий, легко адаптувати під інші шаблони (наприклад, IP + порт).PS:REGEXP_LIKE це SQL-функція, яка дозволяє перевіряти, чи текст відповідає регулярному виразу. Регулярний вираз (англ. regular expression, regex) - це спеціальний шаблон для пошуку відповідності в тексті.REGEXP_LIKE повністю підтримується в Oracle БД, та MySQL починаючи з 8 версії (до цього був аналог REGEXP), в БД PostgreSQL немає REGEXP_LIKE, але є аналог через regex match. В SQL Server вбудованої підтримки регулярних виразів немає.#sql_code