COMPLEMENTO DE AJUDA EM SQL - VERIFICADO SE É PARA OU IMPAR
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
Curtidas 0
Respostas
Wilson Junior
12/12/2010
Tente assim
Espero ter colaborado.
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
12/12/2010
Tente assim
Espero ter colaborado.
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