SQL Postgres находит слово первым в списке слов в строковом поле - PullRequest
0 голосов
/ 14 мая 2018

У меня простой запрос. Ищите слово в строковом поле, как показано ниже:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.2.1.17116

Я ОЖИДАЮ "ХРОМОВЫХ" РЯДОВ ТОЛЬКО КАК ВЫХОДА

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/56.0.2924.90 Chrome/537.36 2345Explorer/9.2.1.17116

Я ожидаю, что ряды "SAFARI" ТОЛЬКО КАК ВЫХОД

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Explorer/56.0.2924.90 Safari/537.36 2345Chrome/9.2.1.17116

Я ожидаю строки "EXPLORER" ТОЛЬКО КАК ВЫХОД

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Explorer/56.0.2924.90 Safari/537.36 2345Chrome/9.2.1.17116

Я не хочу, чтобы строки «CHROME» выводились, когда я запрашиваю строки с «CHROME»

Подумайте только о Chrome и Chrome = 1 Тогда, если у меня есть 1-2-3, я хочу вывести Если 2-1-3 я не хочу выводить Если 2-3-1 не хотите выводить

Я хочу это только тогда, когда оно наступит первым.

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

 SELECT *
 FROM user_logins
 WHERE user_agent NOT LIKE '%iPhone%'
 AND user_agent NOT LIKE '%Linux; Android%'
 order BY id DESC
 LIMIT 1000

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы можете использовать substring() с аргументом шаблона, чтобы извлечь элемент формы /#.#.#.#. Затем сравните его с Chrome:

select substring(x from '[^ ]*/[0-9]+[.][0-9]+[.][0-9]+[.][0-9]'),
       v.*
from (values ('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.2.1.17116'),
             ('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/56.0.2924.90 Chrome/537.36 2345Explorer/9.2.1.17116')
     ) v(x)
where substring(x from '[^ ]*/[0-9]+[.][0-9]+[.][0-9]+[.][0-9]') like 'Chrome/%';
0 голосов
/ 14 мая 2018

Я бы это пересмотрел, что-то вроде:

so=# with c(s) as (values
 ('blahChrome/56.0.2924.90 Safari/537.36 2345')
,('blahSafariblahChromeblah')
)
select s ~ 'Chrome.*Safari', s ~ 'Safari.*Chrome',s from c;
 ?column? | ?column? |                     s
----------+----------+--------------------------------------------
 t        | f        | blahChrome/56.0.2924.90 Safari/537.36 2345
 f        | t        | blahSafariblahChromeblah
(2 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...