Jump to content

Recommended Posts

Posted

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
Posted

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!

Posted (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 by apocsantos
geshi
Posted

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!

Posted

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

Posted (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 by jafm
Posted (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 by apocsantos

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.