我只想提取第一个单词到第一个空格。
我使用了以下查询:
select upper(substring(substring(descripcion,28),0,length(substring(descripcion,28))-position(' ' in reverse(substring(descripcion,28)))+1)) from evento where descripcion ~ 'Act. datos:Actualización';
但它给了我一切,不仅仅是第一个空格前的第一个单词。
我如何获得以下结果
- 约翰
- Elena
- 玛丽亚
- Marcus
- 马里奥
- 安娜
- 佩德罗
等。
使用带空格的split_part
作为分隔符来获取第一个字符串,例如
SELECT split_part('CARMEN SANDIEGO',' ',1);
split_part
------------
CARMEN
所以在你的情况下,它应该是类似的东西
SELECT
upper(
split_part(
trim(substring(descripcion,28)),' ',1))
FROM evento
WHERE descripcion ~ 'Act. datos:Actualización';
演示:db<>fiddle
使用regexp_replace:
select upper(regexp_replace(
descripcion,
'^Act. datos:Actualización de ([a-z]+).+$',
'1'))
from evento
where descripcion ~ '^Act. datos:Actualización de ([a-z]+).+$';
请。请注意,为了更简单,用于过滤和文本提取的regex是相同的。我已经修复了你的一点,并添加了一个捕获组。