COMPLEMENTO DE AJUDA EM SQL - VERIFICADO SE É PARA OU IMPAR

Firebird

12/12/2010


Olá a todos!

antes de mais nada meu agradecimento
pela contribuição anterior do colega Winson Lehapan
quanto ao typecast no tipo char para integer.

Utilizo delphi 7 + dbexpress + firebird 1.5 + ib expert.

No exemplo "2 - " mais abaixo
a consulta me retorna todos os registros da tabela (t_0001)...
cujo operação de "SUBTRAÇÃO"
entre os campos do tipo "CHAR" (c_dezena_1 ... etc... c_dezena_6)... é = a 1.

o where me permite filtrar ocorrencias sequencias nos valores dos campos tipo...
"01 02 03 04 15 16" ... ou ... "01 15 16 17 18 26" ... ou ... "01 15 27 28 29 30"...

o programa em desenvolvimento está ligado a combinações lotéricas.

necessito no momento de um auxílio (dica) de como incluir na clausula WHERE...
uma comparação para verificar e filtrar campos cujo conteudo é par (ou impar)...
tipo...

----
1 - necessito de um auxilio para este where
---

select
    t_0001.c_dezena_1,
    t_0001.c_dezena_2,
    t_0001.c_dezena_3,
    t_0001.c_dezena_4,
    t_0001.c_dezena_5,
    t_0001.c_dezena_6

from t_0001

where
       (
        (cast(t_0001.c_dezena_2 as integer) = numero_par)
        and
        (cast(t_0001.c_dezena_3 as integer) = numero_par)
        ....
       )
...



----
2 - abaixo a solução para retorno após a subtração entre campos...
(dica de typecast q o colega Winson Lehapan me passou anteriormente)
----

select
    t_0001.c_dezena_1,
    t_0001.c_dezena_2,
    t_0001.c_dezena_3,
    t_0001.c_dezena_4,
    t_0001.c_dezena_5,
    t_0001.c_dezena_6

from t_0001

where
      (
       (
        (cast(t_0001.c_dezena_2 as integer) - cast(t_0001.c_dezena_1 as integer) = 1)
        and
        (cast(t_0001.c_dezena_3 as integer) - cast(t_0001.c_dezena_2 as integer) = 1)
        and
        (cast(t_0001.c_dezena_4 as integer) - cast(t_0001.c_dezena_3 as integer) = 1)
       )

      or

       (
        (cast(t_0001.c_dezena_3 as integer) - cast(t_0001.c_dezena_2 as integer) = 1)
        and
        (cast(t_0001.c_dezena_4 as integer) - cast(t_0001.c_dezena_3 as integer) = 1)
        and
        (cast(t_0001.c_dezena_5 as integer) - cast(t_0001.c_dezena_4 as integer) = 1)
       )

      or

       (
        (cast(t_0001.c_dezena_4 as integer) - cast(t_0001.c_dezena_3 as integer) = 1)
        and
        (cast(t_0001.c_dezena_5 as integer) - cast(t_0001.c_dezena_4 as integer) = 1)
        and
        (cast(t_0001.c_dezena_6 as integer) - cast(t_0001.c_dezena_5 as integer) = 1)
       )
      )

Userba

Userba

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

12/12/2010

Tente assim
select
    t_0001.c_dezena_1,
    t_0001.c_dezena_2,
    t_0001.c_dezena_3,
    t_0001.c_dezena_4,
    t_0001.c_dezena_5,
    t_0001.c_dezena_6

from t_0001

where
       (
        (cast(t_0001.c_dezena_2 as integer) - (cast(t_0001.c_dezena_2 as integer) / 2) * 2 = 0) /* 0 é Par */
        and
        (cast(t_0001.c_dezena_3 as integer) - (cast(t_0001.c_dezena_3 as integer) / 2) * 2 = 1) /* 1 é Ímpar */
        ....
       )


Espero ter colaborado.
GOSTEI 0
Userba

Userba

12/12/2010

Tente assim
select
    t_0001.c_dezena_1,
    t_0001.c_dezena_2,
    t_0001.c_dezena_3,
    t_0001.c_dezena_4,
    t_0001.c_dezena_5,
    t_0001.c_dezena_6

from t_0001

where
       (
        (cast(t_0001.c_dezena_2 as integer) - (cast(t_0001.c_dezena_2 as integer) / 2) * 2 = 0) /* 0 é Par */
        and
        (cast(t_0001.c_dezena_3 as integer) - (cast(t_0001.c_dezena_3 as integer) / 2) * 2 = 1) /* 1 é Ímpar */
        ....
       )


Espero ter colaborado.


grato mais uma vez colega... "resolvido"
apenas uma pequena observação para que fique mais claro a outros colegas...
como o objetivo é descobrir se o conteúdo inserido em determinada coluna é uma inteiro (par... ou... impar)...
então a sua dica deve ser aplicada apenas ao campo a ser analisado.
abraços.

o novo exemplo retornando se é "impar":

select

  t_teste.c_dezena_1,
  t_teste.c_dezena_2,
  t_teste.c_dezena_3,
  t_teste.c_dezena_4,
  t_teste.c_dezena_5,
  t_teste.c_dezena_6

from t_teste

where

  cast(t_teste.c_dezena_1 as integer) - (cast(t_teste.c_dezena_1 as integer) / 2) * 2 <> 0 /* é impar */

...

ou... se desejar retornar "par"... a where ficaria...

...

where

  cast(t_teste.c_dezena_1 as integer) - (cast(t_teste.c_dezena_1 as integer) / 2) * 2 = 0 /* é par */

...

GOSTEI 0
POSTAR