Re: trying to pattern match to a value contained in a column - Mailing list pgsql-sql
From | Beth Gatewood |
---|---|
Subject | Re: trying to pattern match to a value contained in a column |
Date | |
Msg-id | 3A3004DC.4FF7CB37@mbt.washington.edu Whole thread Raw |
In response to | RE: trying to pattern match to a value contained in a column ("Francis Solomon" <francis@stellison.co.uk>) |
Responses |
Re: trying to pattern match to a value contained in a column
Re: trying to pattern match to a value contained in a column Re: trying to pattern match to a value contained in a column |
List | 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 anexplicit 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@postgresql.org > > [mailto:pgsql-sql-owner@postgresql.org]On Behalf Of Beth Gatewood > > Sent: 07 December 2000 21:06 > > To: pgsql-sql@postgresql.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 > > > > > >