FUNCAO SQL

CAIO.FR.SP 03/09/2009 09:57:50
#321807
tem como eu pesquisar em um banco de dados usando uma sql string que tenha mais de uma comparação? tipo:
  Select From os Where status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE1[ô] and Datent Between #01/09/2009# and #01/10/2009#;

tem jeito?
RCMRO 03/09/2009 10:36:19
#321811
SIM...
é exatamente assim. Vc só não colocou os campos após o SELECT

 
SELECT a.Nome, b.Endereco
FROM tbCliente a
INNER JOIN tbEnderecos b
ON a.id_Cliente = b.id_cliente
WHERE a.Nome LIKE [ô]%JORGE%[ô]
AND a.Dt_Inclusao BETWEEN #01/01/2008# AND #31/12/2008#
AND b.UF = [ô]SP[ô]
TRTNCG 03/09/2009 10:37:09
#321813
Sim claro que sim você pode ter N critérios de comparação
CAIO.FR.SP 03/09/2009 10:51:58
#321815
certo mas no caso as comparações sao todas na mesma tabela, sem o uso do inner join. tbm funciona?
MARCELO.TREZE 03/09/2009 14:33:34
#321841
tente assim

 Select * From os Where (status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE1[ô]) and (Datent Between #01/09/2009# and #01/10/2009#);


RICART 03/09/2009 14:39:07
#321843
Resposta escolhida
Bom,

Vc pode fazer mais de 1001 coisas com SQL, desde que bem aplicado:
Vc pode criar blocos de comparacoes, delimitando-os com parênteses:

Select From os Where (status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE1[ô] and Datent Between #01/09/2009# and #01/10/2009#) or
status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE2[ô] and Datent Between #01/01/2009# and #01/12/2009#;

Select From os Where (status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE1[ô] and Datent Between #01/09/2009# and #01/10/2009#) or
status = [ô]PENDENTE[ô] And cliente = [ô]CLIENTE2[ô] and Datent Between #01/09/2009# and #01/10/2009#;

Isso, considerado somente estes campos. Imagine que dá pra vc fazer muito mais, inclusive com consulta união.

RICART 03/09/2009 14:45:25
#321845
Select From os Where (status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE1[ô] and Datent Between #01/09/2009# and #01/10/2009#) or
(status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE2[ô] and Datent Between #01/01/2009# and #01/12/2009#);

Select From os Where (status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE1[ô] and Datent Between #01/09/2009# and #01/10/2009#) or
(status = [ô]PENDENTE[ô] And cliente = [ô]CLIENTE2[ô] and Datent Between #01/09/2009# and #01/10/2009#);

Esqueci dos parênteses do segudo bloco!
CAIO.FR.SP 03/09/2009 15:58:38
#321853
vixe galera ta ajudando mto, vlw. so uma duvida, o comando between funciona se o campo venc da tabela for do formato texto ao invez date?
RICART 03/09/2009 16:04:38
#321854
Bom,
Pode até ser que vc consiga se converter o valor do campo para date dentro da sql, mas não é uma boa prática e pode lhe trazer sérios problemas em termos de performance e credibilidade das informações.

Melhor trabalhar com o tipo certo e mais adequado para o campo.
CAIO.FR.SP 03/09/2009 16:09:00
#321855
converter os dados da tabela na consulta? pode? tipo:
Select From os Where (status = [ô]EM ABERTO[ô] And cliente = [ô]CLIENTE1[ô] and Datent Between #01/09/2009# and #01/10/2009#) or
(status = [ô]PENDENTE[ô] And cliente = [ô]CLIENTE2[ô] and [txt-color=#ff0000]date(Datent)[/txt-color] Between #01/09/2009# and #01/10/2009#);
RICART 03/09/2009 16:21:44
#321857
Isso. Mas vc terá perda de performance e uma informação com grande perigo de lhe gerar problemas.
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas