pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Ragnar <gnari@hive.is>
To: Wilton Wonrath <wrwonrath@yahoo.com.br>
Cc: pgsql-sql@postgresql.org
Subject: Re: Range of caracters
Date: Tue, 07 Aug 2007 18:18:14 +0000
Message-ID: <1186510694.5778.401.camel@localhost.localdomain> (raw)
In-Reply-To: <603019.54350.qm@web34314.mail.mud.yahoo.com>
References: <603019.54350.qm@web34314.mail.mud.yahoo.com>

On þri, 2007-08-07 at 10:07 -0700, Wilton Wonrath wrote:

>     Data Table
> 
> Inicial                              -------------  Final
> 9C2HB02107R008000                         9C2HB02107R008200
>     
> FAIXA1                                                FAIXA100
> 
> I´m doing the following query:
> 
> SELECT recallfxchassi.* FROM recallfxchassi 
> LEFT JOIN recall ON recallfxchassi.idrecall = recall.id WHERE 
> ('FAIXA2' BETWEEN chassiinicial AND chassifinal);
> 
> This is not returning anything. I believe that is because it´s check´s
> caracter by caracter and 2 is bigger than 1. But in a real situation
> I will need that return something (FAIXA2 is between FAIXA1 and
> FAIXA100).
> 
> Does anyone knows if exists some way or command in PostgreSQL that
> could solve this "problem" ?

sounds like you need to normalize your schema, but it is possible.

if the prefix is fixed then you can do 
WHERE substr('FAIXA2',6)::integer 
      between substr(chassiinicial,6)::integer 
      and substr(chassifinal,6)::integer;


if the prefix is not fixed, but it's length is, and you are using a
sufficiently recent version of postgresql, you can do:
WHERE (substr('FAIXA2',1,5),
       substr('FAIXA2',6)::integer) 
   between    
       (substr(chassiinicial,1,5),
        substr(chassiinicial,6)::integer) 
   and (substr(chassifinal,1,5),
        substr(chassifinal,6)::integer);

if the prefix length is not fixed, you will have
to do some juggling:
WHERE (substring('FAIXA2' from '^[^0-9]*'),
       substring('FAIXA2' from '[0-9]+$')::integer) 
   between    
       (substr(chassiinicial from '^[^0-9]*'),
        substr(chassiinicial from '[0-9]+$')::integer) 
   and (substr(chassifinal from '^[^0-9]*'),
        substr(chassifinal from '[0-9]+$')::integer);


gnari





view thread (2+ messages)

Message-ID: <1186510694.5778.401.camel@localhost.localdomain>
Permalink:  ../1186510694.5778.401.camel@localhost.localdomain/
Also on:    postgresql.org/message-id/1186510694.5778.401.camel@localhost.localdomain

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: gnari@hive.is, wrwonrath@yahoo.com.br
  Subject: Re: Range of caracters
  In-Reply-To: <1186510694.5778.401.camel@localhost.localdomain>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox