Postgres 8.3+数据库文本列包含可能的多行表达式。
表达后,有空行和注释区域。 注释区域以行首开头的**字符开头。 表达式结尾只能有空行
实施例
1+
2
** this
is comment
使用追踪额外换行符:
1+
2
** this
is comment and newline after expression
如何从表达式中删除空行和注释?
表达式中的空行shoudl替换为空格。表达式末尾的空行和注释应该被删除。两种情况下结果都应为1+ 2
。
如果只有注释,则应返回空字符串。
我尝试了下面的方法,但这并没有用空格替换表达式中的换行符。怎么解决?
CREATE OR REPLACE FUNCTION public.RemoveComment(value text) RETURNS text AS
$BODY$
select case when tulem like '**%' then ''
else tulem end
from (
SELECT trim(lower( Translate( regexp_replace($1, E'\n\\*\\*.*', '', 'g'),E'\n\r', '') )) as tulem
) tulem;
$BODY$ language sql immutable;
答案 0 :(得分:1)
无法在Postgres 8.3中进行测试,这已经太老了,我再也无法使用了。但这应该有效 - 它在Postgres 9.3中有用。
SELECT regexp_replace($1, '[ \n]*\*\*.*$', '');
standard_conforming_strings = on
!更多:
[ \n\r]
..空格,换行符和回车符的字符类。您可能不需要\r
,具体取决于您的字符串。
*
..任意数量或次数
\*\*
..两个字面星星
.*
..任何字符,任意数量的时间
$
..字符串结尾
答案 1 :(得分:0)
如果要删除注释并用文本中的空格替换换行符,则应使用替换两次:
regexp_replace(regexp_replace($1, '((\n*)(\*\*.*)?)$', ''),'\n',' ')