我需要使用Postgresql 9.x中的
我的源字符串类似于这样:
SUBSTRING
函数创建一个查询来提取字符串和第一个管道符号之间的子字符串。我的源字符串类似于这样:
THIS IS MY EXAMPLE|OTHER EXAMPLE|HELLO: Kevin|OTHER EXAMPLE|OTHER EXAMPLE
所以我创建了这个查询:
SELECT SUBSTRING(myField from 'HELLO: (.*)\|') AS test FROM myTable
我想要在字符串'HELLO: '
和第一个竖线字符之间获取单词Kevin
,但是它并没有按照预期工作,因为它返回了Kevin|OTHER EXAMPLE|OTHER EXAMPLE
。
我做错了什么?
HELLO: ([^|]+)
,例如SELECT SUBSTRING(myField from 'HELLO: ([^|]+)') AS test FROM myTable
。 - Wiktor Stribiżew*
是贪婪的。你可以使用它的非贪婪(懒惰)对应:*?
,例如'HELLO: (.*?)\|'
(在 PostgreSQL 中也适用)。 (当然,发布的答案也是正确的,你也可以通过改变模式逻辑来避免贪婪。) - pozs