Re: Expresiones regulares

Lists: ecpug
From: Tonny <tonny(dot)lists(at)gmail(dot)com>
To: ecpug(at)postgresql(dot)org
Subject: Expresiones regulares
Date: 2010-09-09 20:07:23
Message-ID: 4C893E7B.7090803@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: ecpug

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


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-11 02:38:17
Message-ID: AANLkTi=tbud_+sdfQq7V6Z=x+MtdMMpp3ESMRfqHpnrJ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: ecpug

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 ~

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

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


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
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