2009/3/11 Rogério A Bassete <[email protected]>:
> Pessoal,
>
> Tenho uma tabela com vários chassi´s de veículos, necessito selecionar a
> seguinte faixa:
>
> Inicial: XYARJ071***000301
> Final:   XYARJ071***039486
>
> Chassis exemplos:
>
> "XYARJ07125A024039"
> "XYARJ07146A056671"
> "ZYARJ07146A056671"
> "XYARJ07185A024045"
> "QYARJ07146A056671"
>
> Elaborei a consulta abaixo, mas seria a melhor forma? Teria como fazer tudo
> com ER?
>
> SELECT
>     *
> FROM
>     veiculo
> WHERE
>     SUBSTR(chassi,1,11) ~ 'XYARJ071...' AND
>     SUBSTR(chassi,12,6)::INTEGER BETWEEN 000301 AND 039486;
>
> Esta consulta retorna:
>
> "XYARJ07125A024039"
> "XYARJ07185A024045"
>


Sim, é possível fazer tudo com uma ER. Agora, vale a pena?
A verificação de intervalos em uma ER não é muito simples. Por ex.
para validarmos o dia de uma data (de 01 a 31) a expressão seria:
0[1-9]|[12][0-9]|3[01]
Para o intervalo 00301 a 39486 a expressão seria bastante grande o
que, em minha opinião, acabaria prejudicando a legibilidade de sua
sentença SQL.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a