Re: Expresiones regulares

From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Tonny <tonny(dot)lists(at)gmail(dot)com>
Cc: ecpug(at)postgresql(dot)org
Subject: Re: Expresiones regulares
Date: 2010-09-12 05:44:55
Message-ID: AANLkTi=j-urC8VzX1S169nv_FgpYzCTbU0fXuKG3jzcb@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: ecpug

2010/9/10 Jaime Casanova <jaime(at)2ndquadrant(dot)com>:
> 2010/9/9 Tonny <tonny(dot)lists(at)gmail(dot)com>:
>> Hola a todos
>>
>> la sigueinte consulta está en SQL server
>>
>> SELECT  *  FROM vehiculo
>> WHERE activo = 1 AND codigo LIKE '[0-9]%'
>>
>> es decir me filtar los activos que empiezen con un número el código
>> no sé como hacerla en postgres
>> estuve revisando algo de LIKE y matches mencionan a  [[:digit:]], pero no se
>> como hacerlo,
>> pueden echarme una mano, estoy migrando una base de SQL server 2000 a
>> postgres
>>
>
> por fin encontre un teclado que me sirve para contestar esto (mi
> teclado no esta bien configurado).
> """
> codigo LIKE '[0-9]%'
> """
>
> like no acepta expresiones regulares sino solo "_" y "%", para lograr
> lo que quieres debes usar el operador ~
>

por cierto, esto es asi por el que el estandar asi lo exige (asi que
estaba mal que m$ sql server lo permitiera, debieron poner esa
funcionalidad en otro operador como hizo postgres):
"""
extraido de la pagina 22 bajo el tema: 4.2.3.3 Other operators
involving character strings
del archivo 5CD2-02-Foundation-2006-01.pdf que es un borrador del
estandar SQL 2008
http://wiki.postgresql.org/wiki/Developer_FAQ#Where_can_I_get_a_copy_of_the_SQL_standards.3F
"""
<like predicate> uses the triadic operator LIKE (or the inverse, NOT
LIKE), operating on three character strings
and returning a Boolean. LIKE determines whether or not a character
string “matches” a given “pattern” (also
a character string). The characters <percent> and <underscore> have
special meaning when they occur in the
pattern. The optional third argument is a character string containing
exactly one character, known as the “escape
character”, for use when a <percent>, <underscore>, or the “escape
character” itself is required in the pattern
without its special meaning.

"""

> SELECT  *  FROM vehiculo
>  WHERE activo = 1 AND codigo ~ '^[0-9]'
>

o si quieres usar lo que el estandar acepta:

SELECT * FROM vehiculo
WHERE activo = 1 AND codigo SIMILAR TO '[0-9]%'

--
Jaime Casanova         www.2ndQuadrant.com
Soporte y capacitación de PostgreSQL

In response to

Browse ecpug by date

  From Date Subject
Next Message Mariano Reingart 2010-09-14 10:19:10 == PostgreSQL: Noticias semanales - 12 de Septiembre de 2010 ==
Previous Message Jaime Casanova 2010-09-11 02:38:17 Re: Expresiones regulares