Знакомая функция PATINDEX в MySQL для Postgresql - PullRequest
1 голос
/ 12 июня 2019

Есть ли знакомая функция для PATINDEX для mysql для postgresql.Я пытаюсь сделать sql как это в postgres.

SELECT PATINDEX('%schools%', 'W3Schools.com');

, который выдает ошибку:

ни одна функция не соответствует заданному имени и типу аргумента.вам может понадобиться добавить явные приведения типов

Чтобы быть более подробным, я пытаюсь получить отдельную числовую и строковую части строки в Postgresql.Я нашел такой пример:

SELECT Section
FROM dbo.Section
ORDER BY LEFT(Section, PATINDEX('%[0-9]%', Section)-1), -- alphabetical sort
         CONVERT(INT, SUBSTRING(Section, PATINDEX('%[0-9]%', Section), LEN(Section))) -- numerical

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Можете ли вы попробовать POSITION() функция:

SELECT POSITION('schools' in 'W3Schools.com');
1 голос
/ 12 июня 2019

Это можно реализовать двумя способами, например, как показано ниже:

postgres=# select strpos('W3Schools.com','Schools');
 strpos 
--------
      3
(1 row)

postgres=# select position('Schools' in 'W3Schools.com');
 position 
----------
        3
(1 row)

postgres=# select regexp_matches('hahahabc123zzz', '(abc)(123)');
 regexp_matches 
----------------
 {abc,123}

postgres=# select array_to_string(regexp_matches('hahahabc123zzz', '(abc)(123)'),' ');
 array_to_string 
-----------------
 abc 123

postgres=# select (regexp_matches('hahahabc123zzz', '(abc)(123)'))[1] as a, (regexp_matches('hahahabc123zzz', '(abc)(123)'))[2] as b;
  a  |  b  
-----+-----
 abc | 123
(1 row)

Хочешь это? И вы можете получить все функции строкового процесса здесь: https://www.postgresql.org/docs/10/functions-string.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...