jafm Posted January 3, 2013 at 10:17 AM Report #489351 Posted January 3, 2013 at 10:17 AM Boas, Com a query conto os movimentos do cliente, comparando com a dada to PC, até aqui tudo bem, agora queria que quando não existisse nenhum movimento aparece o resultado com 0 e não vazio, é possível fazer isso através da query? select Count(Id)as total , id from Cliente where Cast(data as date) = Cast (GETDATE() as date) group by id
pmg Posted January 3, 2013 at 10:31 AM Report #489353 Posted January 3, 2013 at 10:31 AM Tu tens os movimentos de clientes numa tabela chamada "Cliente"? Onde é que tens os dados de clientes? O nome, a morada, o telefone, ...??? Faz um query que liga a tabela de clientes (con nome, morada, ...) e a tabela de movimentos (com data, valor, ...) com um OUTER JOIN. Assim ja te aparecem todos os clientes, quer tenham movmentos ou nao. Se nao tens tabelas diferenciadas para clientes e movimentos, altera a base de dados. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
jafm Posted January 3, 2013 at 04:19 PM Author Report #489387 Posted January 3, 2013 at 04:19 PM (edited) Já consegui controlar esse problema, obrigado pela ajuda. Entretanto surgiu outro que é o seguinte, Quero saber quais os clientes que fazem anos neste mês. Contrui esta query, só que o formato das minhas datas de nascimento são 18-Jan-1965, 18-Nov-1984, só que com esta query dá me erro de conversão, o resultado esperado seria por exemplo 2008-11-17 14:48:00 select * from Cliente where DAY(Data) = DAY((GETDATE()+15)) and MONTH(Data) = MONTH(GETDATE()) Não existe possibilidade de conseguir contornar a query para que eu possa verificar os aniversário através do seguinte formato 18-Jan-1965 Edited January 3, 2013 at 04:56 PM by apocsantos geshi
pmg Posted January 3, 2013 at 07:27 PM Report #489405 Posted January 3, 2013 at 07:27 PM Existir existe (praticamente tudo é possível em informática), mas não é aconselhavel. A tua query nesses moldes fica lenta e pouco funcional ... e cada vez mais e mais lenta à medida que a base de dados cresce. A boa solução passa por redefnires a base de dados tendo as colunas com tipo de dados apropriados: datetime (ou smalldatetime) para datas; varchar para nomes; ... What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Rechousa Posted January 3, 2013 at 10:27 PM Report #489434 Posted January 3, 2013 at 10:27 PM Olá, Quero saber quais os clientes que fazem anos neste mês. Contrui esta query, só que o formato das minhas datas de nascimento são 18-Jan-1965, 18-Nov-1984, só que com esta query dá me erro de conversão, o resultado esperado seria por exemplo 2008-11-17 14:48:00 select * from Cliente where DAY(Data) = DAY((GETDATE()+15)) and MONTH(Data) = MONTH(GETDATE()) Não existe possibilidade de conseguir contornar a query para que eu possa verificar os aniversário através do seguinte formato 18-Jan-1965 Quando dizes que estás a usar "18-Jan-1965, 18-Nov-1984" significa que o quê? Que estão em texto? É que podes ter isto em SQL Server (tem é de estar em Inglês): DECLARE @Data DATE = '18-Apr-1965'; PRINT @Data; -- Resultado: 1965-04-18 -- ou em Português SET LANGUAGE Portuguese; DECLARE @DataPT DATE = '18-Apr-1965'; PRINT @DataPT; -- Resultado: 1965-04-18 A partir da data consegues obter os utilizadores que fazem anos nesse mês fazendo: SET LANGUAGE Portuguese; DECLARE @Data DATE = GETDATE(); SELECT * FROM Cliente WHERE YEAR(Data) = YEAR(@Data) AND MONTH(Data) = MONTH(@Data); Pedro Martins Sharing is Knowledge! http://www.linkedin.com/in/rechousa
jafm Posted January 4, 2013 at 03:39 PM Author Report #489544 Posted January 4, 2013 at 03:39 PM (edited) Percebi a tua ideia Rechousa, pena é o formato do GETDATE() não estar por exemplo 18-Abr-1965 SET LANGUAGE Portuguese; DECLARE @DataPT DATE = GETDATE() PRINT @DataPT; -- Resultado 2013-01-04 Quando o resultado deveria ser 2013-Jan-04 Não existe a possibilidade de modificar o tipo de data do GETDATE()? Edited January 4, 2013 at 03:42 PM by jafm
jafm Posted January 4, 2013 at 06:51 PM Author Report #489576 Posted January 4, 2013 at 06:51 PM (edited) Bem ja consegui resolver mais ou menos o problema coloquei da seguinte forma, SET LANGUAGE Portuguese; DECLARE @DATA varchar(11) = REPLACE(CONVERT(VARCHAR(11), GETDATE(), 106), ' ', '-') print @Data --Resultado 04-jan-2013 SELECT top 111 * FROM Cliente WHERE MONTH(Data) = MONTH(@data) Só que chega a um certo momento apresenta que volta a dar de novo o erro Conversion failed when converting date and/or time from character string. Edited January 4, 2013 at 07:03 PM by apocsantos
jafm Posted January 7, 2013 at 04:38 PM Author Report #490018 Posted January 7, 2013 at 04:38 PM já consegui controlar o problema. obrigado pela ajuda uma vez mais
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now