From: | Beth Gatewood <bethg(at)mbt(dot)washington(dot)edu> |
---|---|
To: | Francis Solomon <francis(at)stellison(dot)co(dot)uk> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: trying to pattern match to a value contained in a column |
Date: | 2000-12-07 21:45:00 |
Message-ID: | 3A3004DC.4FF7CB37@mbt.washington.edu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Hi Francis-
Thank you for your rapid and excellent response.
This makes perfect sense...unfortunately it isn't working...
I hope this isn't because I am using 6.3 (yes...I know it is very very
old but this is currently where the data is!)
here is the query:
select * from av34s1 where chromat ~~ ('%' || sample || '%');
ERROR: parser: syntax error at or near "||"
I have also tried using LIKE....
samething..
NOW..
select * from av34s1 where chromat~sample;
ERROR: There is no operator '~' for types 'bpchar' and 'bpchar'
You will either have to retype this query using an explicit
cast,
or you will have to define the operator using CREATE OPERATOR
Indeed...
Table = av34s1
+----------------------------------+----------------------------------+-------+
| Field | Type |
Length|
+----------------------------------+----------------------------------+-------+
| contig | char()
| 10 |
| contig_pos | char()
| 10 |
| read_pos | char()
| 10 |
| chromat | char()
| 30 |
| sample | char()
| 30 |
| allele1 | char()
| 10 |
| allele2 | char()
| 10 |
| ref_pos | char()
| 10 |
| ref_sample | char()
| 10 |
| tag | char()
| 10 |
| source | char()
| 10 |
+----------------------------------+----------------------------------+-------+
Thanks for your response...
Beth
Francis Solomon wrote:
> Hi Beth,
>
> Try something like this ...
>
> Here's a simple table schema:
>
> CREATE TABLE abbrev (
> abbr varchar(10),
> long_name varchar(50),
> primary key(abbr)
> );
>
> Throw in some random data:
>
> INSERT INTO abbrev VALUES ('fs', 'fsolomon');
> INSERT INTO abbrev VALUES ('bg', 'bgatewood');
> INSERT INTO abbrev VALUES ('junk', 'nomatch');
>
> Query the table:
>
> SELECT * FROM abbrev WHERE long_name~abbr;
>
> ... which yields these results:
>
> abbr | long_name
> ------+-----------
> fs | fsolomon
> bg | bgatewood
>
> Note that ~ does a case-sensitive regex match. If you really want a
> 'like' match, you could do this instead:
>
> SELECT * FROM abbrev where long_name~~('%' || abbr || '%');
>
> ... where '||' is the string-concatenation operator.
>
> Hope this helps
>
> Francis Solomon
>
> > -----Original Message-----
> > From: pgsql-sql-owner(at)postgresql(dot)org
> > [mailto:pgsql-sql-owner(at)postgresql(dot)org]On Behalf Of Beth Gatewood
> > Sent: 07 December 2000 21:06
> > To: pgsql-sql(at)postgresql(dot)org
> > Subject: [SQL] trying to pattern match to a value contained
> > in a column
> >
> >
> > Hi-
> >
> > I can't figure out how to do this....
> >
> > I examine a table where I think that one attribute is an
> > abbreviation of
> > another attribute.
> >
> > So-If I had a table where I had LONG_NAME and ABBR as attributes.
> >
> > I want something like
> >
> > SELECT whatever FROM my_table WHERE long_name LIKE '%[the
> > value of ABBR
> > in that row]%';
> >
> >
> > Of course this doesn't work...
> >
> > Any thoughts?
> >
> > Thanks-
> > Beth
> >
> >
> >
From | Date | Subject | |
---|---|---|---|
Next Message | Jie Liang | 2000-12-07 23:01:56 | Re: how to execute a C program via trigger ? |
Previous Message | Peter Eisentraut | 2000-12-07 21:39:07 | Re: trying to pattern match to a value contained in a column |