查询中的字符串操作

时间:2013-03-12 07:25:41

标签: postgresql

我有文字栏' mytext'有这样的(像)数据:

  

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

我必须在列中的字符串的一部分上使用SELECT DISTINCT查询表 这一部分从字符串的开头开始,到字符串末尾的位置或字符“#”;出现。 所以我可以得到结果:

  

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

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

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

3 个答案:

答案 0 :(得分:1)

只需像这样使用regexp_replace

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

强制性SQLFiddle DEMO

答案 1 :(得分:1)

使用正则表达式

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

related postgresql doc

或没有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)

答案 2 :(得分:0)

您可以将子字符串与charindex一起使用。

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

ND