INTERVALO ENTRE DATAS SQL SERVER 2005

RICARDO.RAPA 31/08/2012 17:45:11
#409030
Estou mudando um sistema de access para sqlserver2005 tenho uma consulta que era assim:

[ô]Data1.RecordSource = [Ô]Select * from C_Mensalidades where cdate(data) BETWEEN #[Ô] & Format(inicio, [Ô]mm/dd/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(Final, [Ô]mm/dd/yyyy[Ô]) & [Ô]# And cod & status = [ô][Ô] & buscar.Text & [Ô]SIM[Ô] & [Ô][ô][Ô]
[ô]Data1.Refresh

Quero converter para sqlserver2005 to tentando fazer assim: Mais dar erro. To tentando achar a sintaxe correta!!!

[ô]Adodc1.CommandType = adCmdText
[ô]Adodc1.RecordSource = ([Ô]Select * from C_Mensalidades where data >= [Ô] & Format(inicio, [Ô]mm/dd/yyyy[Ô]) & [Ô] AND data <=[Ô] & Format(Final, [Ô]mm/dd/yyyy[Ô]) & [Ô] And cod = [Ô] & buscar.Text & [Ô] AND status = [ô][Ô] & [Ô]SIM[Ô] & [Ô][ô][Ô])
[ô]Adodc1.Refresh


o campo data = nvarchar(10)
cod = nchar(5)
status = ntext


Alguém pode me ajudar. GRATO!

ROBIU 31/08/2012 21:11:13
#409035
Você pode [Ô]desmembrar[Ô] o seu campo para pegar o dia, mes e ano armazenado porque não dá para fazer operações com datas em campos nvarchar.
Veja minha resposta neste tópico
OCELOT 31/08/2012 22:49:10
#409036
qual o motivo do seu campo ser nvarchar em vez de datetime?

repare também que você não usou um delimitador para a data de forma que a sql vai efetuar um cálculo com os números, o ideal na verdade seria você aprender a usar parâmetros, que é não apenas recomendado como também a forma mais segura de se passar dados para uma sql
FILMAN 01/09/2012 17:16:48
#409044
Resposta escolhida
Adodc1.RecordSource = ([Ô]SELECT * FROM C_MENSALIDADES WHERE data BETWEEN [ô][Ô] & Format(inicio, [Ô]mm/dd/yyyy[Ô]) & [Ô][ô] AND [ô][Ô] & Format(final, [Ô]mm/dd/yyyy[Ô]) & [Ô][ô] And cod = [ô][Ô] & buscar.Text & [Ô][ô] AND UPPER(status) = [ô]SIM[ô][Ô])



Acho que isso aqui vai te ajudar
RICARDO.RAPA 02/09/2012 14:13:53
#409053
FILMAN, cara deu quase certo. A sintaxe passou fazendo assim:

Adodc1.CommandType = adCmdText
Adodc1.RecordSource = ([Ô]SELECT * FROM C_MENSALIDADES WHERE data BETWEEN [ô][Ô] & Format(inicio, [Ô]dd/mm/yyyy[Ô]) & [Ô][ô] AND [ô][Ô] & Format(Final, [Ô]dd/mm/yyyy[Ô]) & [Ô][ô] And cod = [ô][Ô] & buscar.Text & [Ô][ô] AND status = [ô]SIM[ô][Ô])
Adodc1.Refresh


coloquei o campo status nvarchar pois não aceitou a função UPPER com ntext mais passou blz.

só que as datas tive que colocar no formato [Ô]dd/mm/yyyy[Ô] (pois do outro jeito nao tava dando certo a busca) so que não filtrou o intervalo correto buscou todas as datas inserida do mesmo cliente (ok) com o mesmo status (ok)

Será que SINTAXE ta aceitando o problema agora está em filtrar o intervalo correto.

Tem alguma Idéia?

dentro da tabela as datas então inseridas: dd/mm/yyyy já tentei colocar também mm/dd/yyyy só que mesm assim ta filtrando tudo.

RICARDO.RAPA 02/09/2012 14:41:23
#409054
configuração do banco
RICARDO.RAPA 02/09/2012 15:08:42
#409057
Acho que vai ser o jeito utilizar o padrão iso mesmo yyyy/mm/dd que resolve.


Grato a todos!
Tópico encerrado , respostas não são mais permitidas