Обсуждение: Regular Expressions
Hi list, I would like to know if postgresql has a Regular Expressions (Regex) implemented already. With it we could implement queries like Select * from myClientes where name = 'E[zs]equias' where the result occurs even if the field has Ezequias or Esequias. Regards Ezequias
Ezequias R. da Rocha wrote: > Hi list, > > I would like to know if postgresql has a Regular Expressions (Regex) > implemented already. > > With it we could implement queries like > > Select * from myClientes where name = 'E[zs]equias' > > where the result occurs even if the field has Ezequias or Esequias. > > Regards > Ezequias Pretty easy to find matches in the documentation at http://search.postgresql.org/ eg. http://www.postgresql.org/docs/8.2/interactive/functions-matching.html
On Wed, 2007-03-21 at 11:04 -0300, Ezequias R. da Rocha wrote: > Hi list, > > I would like to know if postgresql has a Regular Expressions (Regex) > implemented already. > > With it we could implement queries like > > Select * from myClientes where name = 'E[zs]equias' > Case Sensitive Regular Match ~ Case Insensitive Regular Match ~* Negated Case Sensitive Regular Match !~ Negated Case Insensitive Regular Match !~* Select * from myClientes where name ~ 'E[zs]equias' > where the result occurs even if the field has Ezequias or Esequias. > > Regards > Ezequias > > ---------------------------(end of broadcast)--------------------------- > TIP 2: Don't 'kill -9' the postmaster > -- Guy Fraser Network Administrator The Internet Centre 1-888-450-6787 (780)450-6787
Guy Fraser escreveu: > On Wed, 2007-03-21 at 11:04 -0300, Ezequias R. da Rocha wrote: > >> Hi list, >> >> I would like to know if postgresql has a Regular Expressions (Regex) >> implemented already. >> >> With it we could implement queries like >> >> Select * from myClientes where name = 'E[zs]equias' >> >> > Case Sensitive Regular Match ~ > Case Insensitive Regular Match ~* > Negated Case Sensitive Regular Match !~ > Negated Case Insensitive Regular Match !~* > > Select * from myClientes where name ~ 'E[zs]equias' > > >> where the result occurs even if the field has Ezequias or Esequias. >> >> Regards >> Ezequias >> >> ---------------------------(end of broadcast)--------------------------- >> TIP 2: Don't 'kill -9' the postmaster >> >> Great I am thinking of putting my like to rest. I felt it faster than "like" statement, have you any information about that ? Ezequias
On Wed, 2007-03-21 at 14:37 -0300, Ezequias R. da Rocha wrote:
> Guy Fraser escreveu:
> > On Wed, 2007-03-21 at 11:04 -0300, Ezequias R. da Rocha wrote:
> >
> >> Hi list,
> >>
> >> I would like to know if postgresql has a Regular Expressions (Regex)
> >> implemented already.
> >>
> >> With it we could implement queries like
> >>
> >> Select * from myClientes where name = 'E[zs]equias'
> >>
> >>
> > Case Sensitive Regular Match ~
> > Case Insensitive Regular Match ~*
> > Negated Case Sensitive Regular Match !~
> > Negated Case Insensitive Regular Match !~*
> >
> > Select * from myClientes where name ~ 'E[zs]equias'
> >
> >
> >> where the result occurs even if the field has Ezequias or Esequias.
> >>
> >> Regards
> >> Ezequias
> >>
> >> ---------------------------(end of broadcast)---------------------------
> >> TIP 2: Don't 'kill -9' the postmaster
> >>
> >>
> Great I am thinking of putting my like to rest. I felt it faster than
> "like" statement, have you any information about that ?
>
No I don't know if regular expressions are faster than "LIKE" but
I think they are more flexible. When developing queries, I usually
try different methods of matching to find out what works best for
each circumstance. Some times upper() lower() and substr() with an
"=" are more effective than other methods.
One of the more powerful features of PostgreSQL is the ability to
use sub-selects to reduce the time required to process a subset of
data from a larger volume of data.
Example :
select*
from (select ss_time, ss_date, ss_type, ss_datafrom full_setwhere ss_type in ('type_a','type_x')) as sub_set
whereupper(ss_data) ~ '[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9]'
order byss_time,ss_date,ss_type
;
> Ezequias
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: You can help support the PostgreSQL project by donating at
>
> http://www.postgresql.org/about/donate
>
On Wed, Mar 21, 2007 at 02:37:07PM -0300, Ezequias R. da Rocha wrote: > Great I am thinking of putting my like to rest. I felt it faster than > "like" statement, have you any information about that ? I think this rather depends on what you're doing. If you're searching for "like 'blahblah%' or " ~ 'blahblah.*'", they're AFAIK about the same. When you have a more complicated RE, though, it might turn out to be a win. A -- Andrew Sullivan | ajs@crankycanuck.ca Information security isn't a technological problem. It's an economics problem. --Bruce Schneier
Guy,
Could you give me a hand ?
I have a ZipCode table and my address table
I just would like to find out all matches that my zipcode table has where my
address table appears like this:
Elmo Street, 30
I would like my SQL find out all matches we can find 'Elmo', 'Street'.
The commas, spaces and numbers could be forgive.
I hope you could help me
Regards
Ezequias
Em Wed, 21 Mar 2007 14:32:26 -0600 Guy Fraser <guy@incentre.net> escreveu:
>On Wed, 2007-03-21 at 14:37 -0300, Ezequias R. da Rocha wrote:
>> Guy Fraser escreveu:
>> > On Wed, 2007-03-21 at 11:04 -0300, Ezequias R. da Rocha wrote:
>> >
>> >> Hi list,
>> >>
>> >> I would like to know if postgresql has a Regular Expressions (Regex)
>> >> implemented already.
>> >>
>> >> With it we could implement queries like
>> >>
>> >> Select * from myClientes where name = 'E[zs]equias'
>> >>
>> >>
>> > Case Sensitive Regular Match ~
>> > Case Insensitive Regular Match ~*
>> > Negated Case Sensitive Regular Match !~
>> > Negated Case Insensitive Regular Match !~*
>> >
>> > Select * from myClientes where name ~ 'E[zs]equias'
>> >
>> >
>> >> where the result occurs even if the field has Ezequias or Esequias.
>> >>
>> >> Regards
>> >> Ezequias
>> >>
>> >> ---------------------------(end of broadcast)---------------------------
>> >> TIP 2: Don't 'kill -9' the postmaster
>> >>
>> >>
>> Great I am thinking of putting my like to rest. I felt it faster than
>> "like" statement, have you any information about that ?
>>
>
>No I don't know if regular expressions are faster than "LIKE" but
>I think they are more flexible. When developing queries, I usually
>try different methods of matching to find out what works best for
>each circumstance. Some times upper() lower() and substr() with an
>"=" are more effective than other methods.
>
>One of the more powerful features of PostgreSQL is the ability to
>use sub-selects to reduce the time required to process a subset of
>data from a larger volume of data.
>
>Example :
>
>select
> *
>from (
> select
> ss_time,
> ss_date,
> ss_type,
> ss_data
> from
> full_set
> where
> ss_type in ('type_a','type_x')
> ) as sub_set
>where
> upper(ss_data) ~ '[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9]'
>order by
> ss_time,
> ss_date,
> ss_type
>;
>
>
>> Ezequias
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 7: You can help support the PostgreSQL project by donating at
>>
>> http://www.postgresql.org/about/donate
>>
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 7: You can help support the PostgreSQL project by donating at
>
> http://www.postgresql.org/about/donate
--
Ezequias Rodrigues da Rocha
> Could you give me a hand ? > > I have a ZipCode table and my address table > > I just would like to find out all matches that my zipcode table has where my > address table appears like this: > > Elmo Street, 30 > > I would like my SQL find out all matches we can find 'Elmo', 'Street'. > select zipcode from zipzodetable where address ~ 'Elmo' and address ~ 'Street'; If the query is too slow I expect that installing the tsearch2 contrib module and using the tsearch2 type queries would give you want you wanted but in a fraction of the time. Regards, Richard Broersma Jr.
Richards and List,
Now I find out the 'similar to' statement where I can do such search, but I
must still parse all substrings.
Here is my stage:
Select * from myAddressTable where address similar to ('%(ELMO|ST.|258)%')
But I still need to Separete all strings.
Could someone help me in this crusade ?
Regards
Ezequias
Em Tue, 27 Mar 2007 15:16:10 -0700 (PDT) Richard Broersma Jr <rabroersma@yahoo.com> escreveu:
>> Could you give me a hand ?
>>
>> I have a ZipCode table and my address table
>>
>> I just would like to find out all matches that my zipcode table has where my
>> address table appears like this:
>>
>> Elmo Street, 30
>>
>> I would like my SQL find out all matches we can find 'Elmo', 'Street'.
>>
>
>select zipcode
>from zipzodetable
>where address ~ 'Elmo'
>and address ~ 'Street';
>
>If the query is too slow I expect that installing the tsearch2 contrib module
>and using the
>tsearch2 type queries would give you want you wanted but in a fraction of the
>time.
>
>Regards,
>Richard Broersma Jr.
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 6: explain analyze is your friend
--
Ezequias Rodrigues da Rocha
> Select * from myAddressTable where address similar to ('%(ELMO|ST.|258)%')
>
> But I still need to Separete all strings.
What is it that you are trying to achieve? What string would you like to seperate?
Regards,
Richard Broersma Jr.