Re: [SQL] How match percent sign in SELECT using LIKE?

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: [SQL] How match percent sign in SELECT using LIKE?
Дата
Msg-id 199903162024.PAA18319@candle.pha.pa.us
обсуждение исходный текст
Ответ на Re: [SQL] How match percent sign in SELECT using LIKE?  (Herouth Maoz <herouth@oumail.openu.ac.il>)
Ответы Re: [SQL] How match percent sign in SELECT using LIKE?  (Zalman Stern <zalman@netcom.com>)
Список pgsql-sql
Yes, you are correct.  However, since '\' is an escape in all our
strings, it makes sense to use it as the default escape in LIKE.

I agree we should allow ESC, but that would make LIKE a trinary
operation, rather than a binary.  If you want really confusing, the code
for LIKE really does:

        | a_expr LIKE a_expr
                {   $$ = makeIndexable("~~", $1, $3); }

so it maps LIKE to a binary operator "~~".  How do we map that into a
trinary operator, which we don't support?  Doesn't really seem worth it.

I can add an item to the TODO list if you wish?


> At 17:45 +0200 on 15/3/99, Bruce Momjian wrote:
>
>
> > I have overhauled the LIKE code.  %% is not a literal %, but is the same
> > as wildcard %.  Literal % is \%.
>
> This is not SQL 92 compliant, is it? The standard states that if you don't
> have an ESCAPE part to the like (i.e. abc LIKE 'bla\%%' ESCAPE '\'), then
> there is no escape. I think the correct thing to do is to support the
> ESCAPE clause:
>
> - - - begin quotation - - -
>
>  Format
>
>  <like predicate> ::=
>       <match value> [ NOT ] LIKE <pattern>
>         [ ESCAPE <escape character> ]
>
>  <match value> ::= <character value expression>
>
>  <pattern> ::= <character value expression>
>
>  <escape character> ::= <character value expression>
>
> [snip]
>
>     a) If an <escape character> is specified, then:
>
>       i) If the length in characters of E is not equal to 1, then
>          an exception condition is raised: data exception-invalid
>          escape character.
>
>      ii) If there is not a partitioning of the string P into sub-
>          strings such that each substring has length 1 or 2, no
>          substring of length 1 is the escape character E, and each
>          substring of length 2 is the escape character E followed by
>          either the escape character E, an <underscore> character,
>          or the <percent> character, then an exception condition is
>          raised: data exception-invalid escape sequence.
>
>          If there is such a partitioning of P, then in that parti-
>          tioning, each substring with length 2 represents a single
>          occurrence of the second character of that substring. Each
>          substring with length 1 that is the <underscore> character
>          represents an arbitrary character specifier. Each substring
>          with length 1 that is the <percent> character represents
>          an arbitrary string specifier. Each substring with length
>          1 that is neither the <underscore> character nor the <per-
>          cent> character represents the character that it contains.
>
>     b) If an <escape character> is not specified, then each <under-
>       score> character in P represents an arbitrary character spec-
>       ifier, each <percent> character in P represents an arbitrary
>       string specifier, and each character in P that is neither the
>       <underscore> character nor the <percent> character represents
>       itself.
>
> - - - end quotation - - -
>
> Herouth
>
> --
> Herouth Maoz, Internet developer.
> Open University of Israel - Telem project
> http://telem.openu.ac.il/~herutma
>
>
>


--
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

В списке pgsql-sql по дате отправления:

Предыдущее
От: "Tim Perdue"
Дата:
Сообщение: Re: [SQL] Setting Next Value in Sequence
Следующее
От: Zalman Stern
Дата:
Сообщение: Re: [SQL] How match percent sign in SELECT using LIKE?