我有文字栏' mytext'有这样的(像)数据:
[first]这是第一部分[second]这是第二部分
[first]这是第一部分[第二部分],可能会有所不同 [first]这是从记录到记录的第一部分[第二部分] [第一]其他记录[第二]和其他文字
[first]其他记录的其他记录[second]
[第一]最后第三次记录[第二次]无论在这里 [第一]第四条记录
[first]第四条记录[第三条]这里错过了第二条
我必须在列中的字符串的一部分上使用SELECT DISTINCT查询表 这一部分从字符串的开头开始,到字符串末尾的位置或字符“#”;出现。 所以我可以得到结果:
[first]这是第一部分 [第一]其他记录
[第一]最后是第三记录 [第一]第四条记录
我认为需要在查询中进行一些字符串操作,但我可能错了。
如何从显示的数据中获得此结果,这可能与我的.NET程序中的查询有关吗?
答案 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)
或没有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