0

我有带有此类(类似)数据的文本列“mytext”:

[first] 这是第一部分 [second] 这是第二部分
[first] 这是第一部分 [second],可能会或可能不会有所不同
[first] 这是第一部分 [second] 从记录到记录
[first] 其他记录 [ second] 其他文字
[first] 其他记录 [second] 其他记录
[first] 最后第三条记录 [second] 此处无所谓
[first] 第四条记录
[first] 第四条记录 [第三条] 这里错过了第二条

而且我必须在列中的部分字符串上使用 SELECT DISTINCT 查询表。
这部分从字符串的开头开始,在字符串的结尾或字符“[”出现的地方结束。所以我可以得到结果:

[first] 这是第一部分
[first] 其他记录
[first] 最后是第三条记录
[first] 第四条记录

我认为为此需要在查询中进行一些字符串操作,但我可能错了。

如何从显示的数据中获得此结果,这可能与我的 .NET 程序中的查询有关吗?

4

3 回答 3

1

像这样使用regexp_replace

SELECT DISTINCT
    regexp_replace(mytext, '^(\[.*?)(\[.*)$', '\1', 'g')
FROM mytable

强制性SQLFiddle 演示

于 2013-03-12T07:40:28.593 回答
1

使用正则表达式

postgres=# select substring('[first] This is first part[second] This is second part' from '(.*)\[second\]');
         substring          
----------------------------
 [first] This is first part
(1 row)

相关的 postgresql 文档

或没有 RE

CREATE OR REPLACE FUNCTION public.left_limit(text, text)
RETURNS text
LANGUAGE sql
AS $function$
SELECT left($1, strpos($1, $2) - 1)
$function$

postgres=# select left_limit('[first] This is first part[second] This is second part','[second]');
         left_limit         
----------------------------
 [first] This is first part
(1 row)
于 2013-03-12T07:44:29.780 回答
0

您可以为它使用带有 charindex 的子字符串。

从您的表中选择不同的子字符串(mytext,1,charindex('[',mytext))txt

ND

于 2013-03-12T07:38:32.827 回答