Обсуждение: Reverse pattern match.

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

Reverse pattern match.

От
"Moonstruck"
Дата:
I want to create a table of  regular expression patterns (for assessing
phone numbers), something like:
CREATE TABLE CallType ( pattern varchar primary key,                       type    varchar,                       rate
 int4);
 
INSERT INTO CallType VALUES ('0[3-9]________','Interstate Call',50);
INSERT INTO CallType VALUES ('9_______','Local Call',25);
INSERT INTO CallType VALUES ('0011__________%','International Call',100);

Then determine call types, based on a match, something like:


PhoneNumber := '99116633';
SELECT type, rate FROM CallType where pattern LIKE PhoneNumber;

(Sorry about the pseudo-code), but you get the gist. The query returns a
calltype description and a call rate based on the comparison of the actual
phone-number to a table of RE patterns.

I can't get my head around a way to do this, can anyone help?

Guy





Re: Reverse pattern match.

От
Rod Taylor
Дата:
On Mon, 2003-08-18 at 03:05, Moonstruck wrote:
> I want to create a table of  regular expression patterns (for assessing
> phone numbers), something like:
> CREATE TABLE CallType ( pattern varchar primary key,
>                         type    varchar,
>                         rate    int4);
> INSERT INTO CallType VALUES ('0[3-9]________','Interstate Call',50);
> INSERT INTO CallType VALUES ('9_______','Local Call',25);
> INSERT INTO CallType VALUES ('0011__________%','International Call',100);
>
> Then determine call types, based on a match, something like:
>
>
> PhoneNumber := '99116633';
> SELECT type, rate FROM CallType where pattern LIKE PhoneNumber;

SELECT type, rate FROM CallType WHERE PhoneNumber ~ pattern;


Re: Reverse pattern match.

От
Josh Berkus
Дата:
Moonstruck,

> I want to create a table of  regular expression patterns (for assessing
> phone numbers), something like:
> CREATE TABLE CallType ( pattern varchar primary key,
>                         type    varchar,
>                         rate    int4);
> INSERT INTO CallType VALUES ('0[3-9]________','Interstate Call',50);
> INSERT INTO CallType VALUES ('9_______','Local Call',25);
> INSERT INTO CallType VALUES ('0011__________%','International Call',100);

PostgreSQL supports real Regular Expressions, via the ~ operator.   See "~"
under "functions and operators", and then consult your favorite book or
online ressouce on how to compose regexps.

An example of "is not in 415 area code" would be
phone_no ~ '^415\d{7}'
which should be "415" at the beginning followed by at least 7 other digits.

(Folks, please correct my regex code if it's bad!)

The disadvantage to this approach is that it cannot be indexed.

--
-Josh BerkusAglio Database SolutionsSan Francisco



Re: Reverse pattern match.

От
"Moonstruck"
Дата:
Many thanks... got it now.

Example...

sox=# select * from regexpatt;pattern |            description
---------+------------------------------------^b      | starts with a B^a      | starts with an A^c.*l$   | starts with
aC and ends with an L
 
(3 rows)

sox=# select description from regexpatt where 'bravo' ~ pattern; description
----------------starts with a B
(1 row)

sox=# select description from regexpatt where 'caramel' ~ pattern;           description
------------------------------------starts with a C and ends with an L
(1 row)


"Josh Berkus" <josh@agliodbs.com> wrote in message
news:200308181611.27937.josh@agliodbs.com...
Moonstruck,

> I want to create a table of  regular expression patterns (for assessing
> phone numbers), something like:
> CREATE TABLE CallType ( pattern varchar primary key,
>                         type    varchar,
>                         rate    int4);
> INSERT INTO CallType VALUES ('0[3-9]________','Interstate Call',50);
> INSERT INTO CallType VALUES ('9_______','Local Call',25);
> INSERT INTO CallType VALUES ('0011__________%','International Call',100);

PostgreSQL supports real Regular Expressions, via the ~ operator.   See "~"
under "functions and operators", and then consult your favorite book or
online ressouce on how to compose regexps.

An example of "is not in 415 area code" would be
phone_no ~ '^415\d{7}'
which should be "415" at the beginning followed by at least 7 other digits.

(Folks, please correct my regex code if it's bad!)

The disadvantage to this approach is that it cannot be indexed.

--
-Josh BerkusAglio Database SolutionsSan Francisco


---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
              http://www.postgresql.org/docs/faqs/FAQ.html





logging messages from inside pgPLSQL routine?

От
Drew Wilson
Дата:
I'mm trying to debug something inside my PLSQL routine. How do I print 
out error messages from inside my function?

Thanks,

Drew



Re: logging messages from inside pgPLSQL routine?

От
Roberto Mello
Дата:
On Thu, Aug 21, 2003 at 05:21:47PM -0700, Drew Wilson wrote:
> I'mm trying to debug something inside my PLSQL routine. How do I print 
> out error messages from inside my function?

RAISE NOTICE ''Foobar is %'', foobar;

Where "foobar" is a variable. The documentation mentions this in several
places and examples.

-Roberto

-- 
+----|        Roberto Mello   -    http://www.brasileiro.net/  |------+
+       Computer Science Graduate Student, Utah State University      +
+       USU Free Software & GNU/Linux Club - http://fslc.usu.edu/     +
Compiling...Linking...Dialing Copyright Lawyer...