Проверьте, удовлетворяет ли первое слово в строке условию SQL - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь отфильтровать Google-ботов из user_agent полей в моей базе данных. Я использую LIKE %text_I_want_to_check_%, и он работает нормально, потому что пока все имена ботов уникальны, однако AdsBot-Google не уникален в строке, что отличается от других user_agents в том, что AdsBot-Google является первой записью в строка.

Пример user_agent с google-bot:

Mozilla/5.0 (Linux; Android 5.0; SM-G920A) AppleWebKit (KHTML, like Gecko) Chrome Mobile Safari (compatible; AdsBot-Google-Mobile; +http://www.google.com/mobile/adsbot.html)

Пример AdsBot-Google:

AdsBot-Google (+http://www.google.com/adsbot.html)

Как видите, оба примера содержат AdsBot-Google, единственное отличие состоит в том, что второй содержит его в первом слове строки.

Мой желаемый вывод: SQL CASE, который проверяет, является ли AdsBot-Google первым текстом в строке, и не мешает другим случаям, когда AdsBot-Google находится в середине строки. Примерно так:

CASE
WHEN (sessions.user_agent like AdsBot-Google) then 'AdsBot-Google-Mobile-iPhone'

1 Ответ

3 голосов
/ 07 февраля 2020

Оператор SQL LIKE на самом деле может проверять что-то, начинающее строку:

SELECT *
FROM sessions
WHERE user_agent LIKE 'AdsBot-Google%';

Обратите внимание, что это будет соответствовать только тем записям, где поле агента пользователя начинается с AdsBot-Google; это не будет соответствовать AdsBot-Google, встречающемуся где-либо еще.

...