Ir para conteúdo
Fórum Script Brasil
  • 0

aniversario


paulaooliveira

Pergunta

Boa noite, sou novo no forum e estou com uma duvida

possuo um banco de dados no qual existe a data de nascimento do cliente, eu gostaria de extrair os aniversariantes de um intervalo de tempo que o usuario possa escolher.

abaixo o codigo q estou tentando mas retorna erro, por favor alguém pode me ajudar e dizer onde esta o erro.

obs, o codigo do SqlCommand eu formatei aqui no forum para ficar de mais facil de ver, (mas considerem ele continuo todo em uma linha)

//===========================================================>> PESQUIZA POR ANIVERSÁRIO DO CLIENTE <<====

public DataTable lista_porData(string diainIcial, string mesinIcial, string diaFinal, string mesFinal)

{

try

{

conexao = new SqlConnection(Conexao_SQL_Server);

SqlCommand sql = new SqlCommand("select * from nomes where Nascimento BETWEEN DAY (Nascimento) = '" + diainIcial + "' AND

MONTH(Nascimento) = '" + mesInicia+ "' AND

DAY (Nascimento) = '" + diaFinal + "' AND

MONTH(Nascimento) = '" + mesFinal + "' AND

codigo = codigo ORDER BY aniversario", conexao);

SqlDataAdapter daClientes = new SqlDataAdapter();

daClientes.SelectCommand = sql;

DataTable dtClientes = new DataTable();

daClientes.Fill(dtClientes);

return dtClientes;

}

catch (Exception erro)

{

throw erro;

}

finally

{

conexao.Close();

}

}

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Tenta assim

select * from nomes where Nascimento BETWEEN 'sua_data_inicial' AND 'sua_data_final' AND codigo = codigo ORDER BY aniversario

KUROLE

Boa noite, sou novo no forum e estou com uma duvida

possuo um banco de dados no qual existe a data de nascimento do cliente, eu gostaria de extrair os aniversariantes de um intervalo de tempo que o usuario possa escolher.

abaixo o codigo q estou tentando mas retorna erro, por favor alguém pode me ajudar e dizer onde esta o erro.

obs, o codigo do SqlCommand eu formatei aqui no forum para ficar de mais facil de ver, (mas considerem ele continuo todo em uma linha)

//===========================================================>> PESQUIZA POR ANIVERSÁRIO DO CLIENTE <<====

public DataTable lista_porData(string diainIcial, string mesinIcial, string diaFinal, string mesFinal)

{

try

{

conexao = new SqlConnection(Conexao_SQL_Server);

SqlCommand sql = new SqlCommand("select * from nomes where Nascimento BETWEEN DAY (Nascimento) = '" + diainIcial + "' AND

MONTH(Nascimento) = '" + mesInicia+ "' AND

DAY (Nascimento) = '" + diaFinal + "' AND

MONTH(Nascimento) = '" + mesFinal + "' AND

codigo = codigo ORDER BY aniversario", conexao);

SqlDataAdapter daClientes = new SqlDataAdapter();

daClientes.SelectCommand = sql;

DataTable dtClientes = new DataTable();

daClientes.Fill(dtClientes);

return dtClientes;

}

catch (Exception erro)

{

throw erro;

}

finally

{

conexao.Close();

}

}

Link para o comentário
Compartilhar em outros sites

  • 0

bom dia

obrigado pela dica, mas assim como sugeriu eu já fiz

e não da certo porque assim eu especifico duas datas q já estao gravadas no banco, ex data inicial (12/02/2011) e data final (13/05/2011) como no banco vai estar o nascimento do cliente ele vai comparar os anos e não vai dar certo.

tenho q conseguir ignorar a verificação dos anos.

Tenta assim

select * from nomes where Nascimento BETWEEN 'sua_data_inicial' AND 'sua_data_final' AND codigo = codigo ORDER BY aniversario

KUROLE

Boa noite, sou novo no forum e estou com uma duvida

possuo um banco de dados no qual existe a data de nascimento do cliente, eu gostaria de extrair os aniversariantes de um intervalo de tempo que o usuario possa escolher.

abaixo o codigo q estou tentando mas retorna erro, por favor alguém pode me ajudar e dizer onde esta o erro.

obs, o codigo do SqlCommand eu formatei aqui no forum para ficar de mais facil de ver, (mas considerem ele continuo todo em uma linha)

//===========================================================>> PESQUIZA POR ANIVERSÁRIO DO CLIENTE <<====

public DataTable lista_porData(string diainIcial, string mesinIcial, string diaFinal, string mesFinal)

{

try

{

conexao = new SqlConnection(Conexao_SQL_Server);

SqlCommand sql = new SqlCommand("select * from nomes where Nascimento BETWEEN DAY (Nascimento) = '" + diainIcial + "' AND

MONTH(Nascimento) = '" + mesInicia+ "' AND

DAY (Nascimento) = '" + diaFinal + "' AND

MONTH(Nascimento) = '" + mesFinal + "' AND

codigo = codigo ORDER BY aniversario", conexao);

SqlDataAdapter daClientes = new SqlDataAdapter();

daClientes.SelectCommand = sql;

DataTable dtClientes = new DataTable();

daClientes.Fill(dtClientes);

return dtClientes;

}

catch (Exception erro)

{

throw erro;

}

finally

{

conexao.Close();

}

}

Link para o comentário
Compartilhar em outros sites

  • 0

vou tentar explicar melhor, no meu banco eu guardo o nascimento do cliente

ex:

joao 12/08/1999

maria 23/05/2004

na tela do meu programa c# eu coloquei duas caixas de DateTime onde o usuario pode escolher o intervalo de tempo q ele quer consultar os aniversariantes.

com o betwwem como o colega sugeriu e eu tentei ele compara a data inteira incluindo o ano, o que no meu caso não serve pois se eu quizer ver os aniversariantes do periodo de 5 dias do corrente mes, ele não retornara nada porque nineguem nasceu neste ano, pois não é um registro de recem nascidos. ;)

tenho q de alguma forma, fazer com que ele ignore o ano compare apenas os meses por isso tentei usar as funcoes DAY e MONTH, por isso passei 4 parametros

dia inicial, mes inicial, dia final e mes final

isso não pode ser uma coisa impossivel, eu uso um sistema onde trabalho onde é possivel fazer isso, e o pior o sistema nem usa banco de dados é feito em cobol.

Grato a todos, vamos ver se agene acha esta solução

Link para o comentário
Compartilhar em outros sites

  • 0

AAAAAAAAA entendi.... nossa eu já sofri com isso tb ninguém entendia ou poderia me ajudar vou postar aqui ... o que acabei fazendo e resolveu o meu problma...

fiz isso depois da WHERE

IF(

MONTH(data_nascimento) = 1 AND MONTH(CURDATE()) = 12,

REPLACE( data_nascimento, YEAR( data_nascimento ) , YEAR( DATE_ADD(CURDATE( ), INTERVAL 1 YEAR) ) ),

REPLACE( data_nascimento, YEAR( data_nascimento ) , YEAR( CURDATE( ) ) )

)

BETWEEN CURDATE( ) AND DATE_ADD( CURDATE( ) , INTERVAL 30 DAY )

com isso eu pego os aniversariantes de hj "getdate()" até 30 dias para frente....

Ve se ajuda

KUROLE

Link para o comentário
Compartilhar em outros sites

  • 0
AAAAAAAAA entendi.... nossa eu já sofri com isso tb ninguém entendia ou poderia me ajudar vou postar aqui ... o que acabei fazendo e resolveu o meu problma...

fiz isso depois da WHERE

IF(

MONTH(data_nascimento) = 1 AND MONTH(CURDATE()) = 12,

REPLACE( data_nascimento, YEAR( data_nascimento ) , YEAR( DATE_ADD(CURDATE( ), INTERVAL 1 YEAR) ) ),

REPLACE( data_nascimento, YEAR( data_nascimento ) , YEAR( CURDATE( ) ) )

)

BETWEEN CURDATE( ) AND DATE_ADD( CURDATE( ) , INTERVAL 30 DAY )

com isso eu pego os aniversariantes de hj "getdate()" até 30 dias para frente....

Ve se ajuda

KUROLE

não sei se não entendi mas não consegui, fazer funcionar, pelo que eu entendi no teu exemplo tu coloca pra listar por um periodo fixo, eu gostaria de ter a flexibilidade de escolher por 5, 13 ou 36 dias enfim selecionar o periodo que eu quizer

grato

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Paulão,

Cada um tem uma forma de implementação... rs. No exemplo abaixo, ao invés de testar os meses e dias, alterei todos os anos da data de nascimento para o ano da pesquisa que o usuário insere.

Dê uma olhada na implementação e vê se atende:

-- criar tabela temporária
CREATE TABLE #teste (Nome VARCHAR(50), DATA DATETIME)

-- carga
INSERT INTO #teste VALUES ('joao', '1999-08-12')
INSERT INTO #teste VALUES ('maria', '2004-05-23')
INSERT INTO #teste VALUES ('jorge', '1980-10-20')
INSERT INTO #teste VALUES ('joana', '1985-01-15')

-- declarar variavel de data inicial e final
-- rodar daqui até no final
declare @DataInicial DATETIME
declare @DataFinal DATETIME

SET @DataInicial = '2010-02-10'
SET @DataFinal = '2010-08-30'


SELECT * FROM #teste t WHERE 
convert (datetime, cast(YEAR (@DataInicial) AS VARCHAR) + '-' + cast (MONTH(data) AS VARCHAR)
+ '-' + cast (day(data) AS VARCHAR), 102) BETWEEN @DataInicial AND @DataFinal
or convert (datetime, cast(YEAR (@DataFinal) AS VARCHAR) + '-' + cast (MONTH(data) AS VARCHAR)
+ '-' + cast (day(data) AS VARCHAR), 102) BETWEEN @DataInicial AND @DataFinal

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...