Обсуждение: Escaping \

Поиск
Список
Период
Сортировка

Escaping \

От
"Martijn van Dijk"
Дата:
Hello all,

I've a problem with escaping a \ in a string.

When I enter the query:

SELECT '''\\\''; I get the right result: '\'

But when I try this in a Function:

CREATE FUNCTION sp_tmp() RETURNS varchar(10)
AS '       SELECT ''\\\' AS RESULT'
LANGUAGE 'sql';

I get the following Parse-erros:

psql:tmp1:4: ERROR:  Unterminated quoted string. I don't understand why,
when you leave the SELECT-statement out you get '''\\\'' and that is not
unterminated.

Please help

Greetings

Martijn van Dijk






Re: Escaping \

От
"Richard Huxton"
Дата:
From: "Martijn van Dijk" <martijn@hardworks.nl>

> I've a problem with escaping a \ in a string.
>
> When I enter the query:
>
> SELECT '''\\\''; I get the right result: '\'
>
> But when I try this in a Function:
>
> CREATE FUNCTION sp_tmp() RETURNS varchar(10)
> AS '
>         SELECT ''\\\' AS RESULT'
> LANGUAGE 'sql';
>
> I get the following Parse-erros:
>
> psql:tmp1:4: ERROR:  Unterminated quoted string. I don't understand why,
> when you leave the SELECT-statement out you get '''\\\'' and that is not
> unterminated.

Had something similar myself the other day. The reason is that you are
already one deep in Postgres' string-parser, so you need something like:

SELECT ''\\\\'' AS RESULT

HTH

- Richard Huxton



Re: Escaping \

От
Tom Lane
Дата:
"Martijn van Dijk" <martijn@hardworks.nl> writes:
> But when I try this in a Function:

> CREATE FUNCTION sp_tmp() RETURNS varchar(10)
> AS '
>         SELECT ''\\\' AS RESULT'
> LANGUAGE 'sql';

> I get the following Parse-erros:

You need an extra level of quoting because the function body is itself
a string literal.  You might find the quoting discussion in
http://www.postgresql.org/devel-corner/docs/postgres/plpgsql-porting.html
helpful.
        regards, tom lane


Re: Escaping \

От
Cedar Cox
Дата:
> > I've a problem with escaping a \ in a string.
> >
> > When I enter the query:
> >
> > SELECT '''\\\''; I get the right result: '\'
> >
> > But when I try this in a Function:
> >
> > CREATE FUNCTION sp_tmp() RETURNS varchar(10)
> > AS '
> >         SELECT ''\\\' AS RESULT'
> > LANGUAGE 'sql';
> >
> > I get the following Parse-erros:
> >
> > psql:tmp1:4: ERROR:  Unterminated quoted string. I don't understand why,
> > when you leave the SELECT-statement out you get '''\\\'' and that is not
> > unterminated.
> 
> Had something similar myself the other day. The reason is that you are
> already one deep in Postgres' string-parser, so you need something like:
> 
> SELECT ''\\\\'' AS RESULT

Seems as if this would give \\

I think you need something like 
 SELECT ''''\\\'' AS RESULT

In other words, double all the single quotes.  (This leads to all kinds of
fun stuff with 7.1 and code generating queries ;)

-Cedar