MySQL中PATINDEX在Postgresql中的熟悉功能

时间:2019-06-12 08:20:18

标签: mysql sql postgresql

对于postgresql,MySQL的PATINDEX是否有任何熟悉的功能。我正在尝试在postgres中创建这样的sql。

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 个答案:

答案 0 :(得分:1)

有两种实现方法,如下例:

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

答案 1 :(得分:1)

您可以尝试使用POSITION()功能吗?

mdb.models['YourModelName'].parts['YourPartName'].getMassProperties()['mass']