Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TeixeiraRamos

Dificuldade com CONCAT

Recommended Posts

Os resultados de:

        TIMESTAMPDIFF(YEAR, data_qso, data_agora) AS Anos,
	TIMESTAMPDIFF(MONTH, data_qso + INTERVAL TIMESTAMPDIFF(YEAR, data_qso, data_agora) YEAR , data_agora) AS Mes,
	TIMESTAMPDIFF(DAY, data_qso + INTERVAL TIMESTAMPDIFF(MONTH, data_qso, data_agora) MONTH , data_agora) AS Dias,

Funcionam perfeitamente, mas a CONCAT AS Extenso não funciona.

SELECT 
	indicativo_ja_registrado,  
	qra,
	fez_contato, 
	DATE_FORMAT(data_qso, '%d/%m/%y') AS data_qso, 
	DATE_FORMAT(data_agora, '%d/%m/%Y') AS data_agora,
        TIMESTAMPDIFF(YEAR, data_qso, data_agora) AS Anos,
	TIMESTAMPDIFF(MONTH, data_qso + INTERVAL TIMESTAMPDIFF(YEAR, data_qso, data_agora) YEAR , data_agora) AS Mes,
	TIMESTAMPDIFF(DAY, data_qso + INTERVAL TIMESTAMPDIFF(MONTH, data_qso, data_agora) MONTH , data_agora) AS Dias,
        Anos, 
        Mes,
        Dias,
        CONCAT(Anos, '  Anos  ', Mes, '  Mes e  ', Dias, ' Dias') AS Extenso,  
        quantidade_dias, 
	hora_qso, 
	faixa_simplex_MHz, 
	faixa_MHz_qso_trans_repetidora, 
	faixa_MHz_qso_trans_outras, 
	nome_pais  
	FROM qry_pesquisa_dois 
	ORDER BY data_qso DESC; 

Compartilhar este post


Link para o post
Compartilhar em outros sites
As informações que são geradas através de uma função, como TIMESTAMPDIFF, não podem ser selecionadas no mesmo SELECT. O que você pode fazer é colocar sua consulta em um subselect, aí sim utilizar os valores:



SELECT
CONCAT(Anos, ' Anos ', Mes, ' Mes e ', Dias, ' Dias') AS Extenso
FROM (
SELECT
TIMESTAMPDIFF(YEAR, data_qso, data_agora) AS Anos,
TIMESTAMPDIFF(MONTH, data_qso + INTERVAL TIMESTAMPDIFF(YEAR, data_qso, data_agora) YEAR , data_agora) AS Mes,
TIMESTAMPDIFF(DAY, data_qso + INTERVAL TIMESTAMPDIFF(MONTH, data_qso, data_agora) MONTH , data_agora) AS Dias
FROM qry_pesquisa_dois
) as dados


Ou passar o subselect para uma view e fazer o select nessa view ao invés da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Anderson e todos os interessados,

Me foi sugerido também isso:

SELECT *, CONCAT(Anos, ' Anos ', Mes, ' Mes e ', Dias, ' Dias') AS Extenso FROM (       
SELECT 
    indicativo_ja_registrado,  
    qra,
    fez_contato, 
    DATE_FORMAT(data_qso, '%d/%m/%y') AS data_qso, 
    DATE_FORMAT(data_agora, '%d/%m/%Y') AS data_agora,
    TIMESTAMPDIFF(YEAR, data_qso, data_agora) AS Anos,
    TIMESTAMPDIFF(MONTH, data_qso + INTERVAL TIMESTAMPDIFF(YEAR, data_qso, data_agora) YEAR , data_agora) AS Mes,
    TIMESTAMPDIFF(DAY, data_qso + INTERVAL TIMESTAMPDIFF(MONTH, data_qso, data_agora) MONTH , data_agora) AS Dias,    
    quantidade_dias, 
    hora_qso, 
    faixa_simplex_MHz, 
    faixa_MHz_qso_trans_repetidora, 
    faixa_MHz_qso_trans_outras, 
    nome_pais  
FROM qry_pesquisa_dois 
ORDER BY qry_pesquisa_dois.data_qso DESC ) t;

Funcionou também.

Até agora não consegui ler algo que justificasse o seguinte:

a) É mais viável para um site se criar view de uma view?

b) Ou deve ser evitado essa pratica para melhores resultados?

c) Não sei se interfere em termos do uso da memória criando uma view de outra view ou de uma só mostrar os resultados?

d) Li algo sobre o uso * (resultado de todas as colunas) quando não for necessário usar todos os campos. Indicar no SELECT o necessário é mais indicado para o bom desenvolvimento dos resultados. Não seria a mesma coisa para a criação de views caso não seja necessário? Mas li também que view é uma tabela virtual e tem suas vantagens. Como analisar esses casos?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não vejo problemas em se criar uma view utilizando dados de outra view, mas isso deve ser algo que faça sentido para a aplicação ou para o banco.


Normalmente eu crio view para consultas que façam algum tipo de processamento/filtro/tratamento nos dados, ou se é uma consulta que pode ser utilizada em vários lugares diferentes do sistema.


O resultado da view não fica armazenada na memória para quando você chamá-la. A view é apenas o comando SELECT, e não os dados, e ela só será executada quando você solicitar. Essa resposta é uma ótima explicação sobre views:




É aconselhado especificar o nome de cada coluna que você quer utilizar, ao invés de usar "*", para trazer apenas os dados que serão utilizados, e também não gastar processamento e recursos desnecessariamente. Sem contar que se você utiliza "*", e mais pra frente você ou outra pessoa adiciona outras colunas na tabela, sua aplicação vai estar trazendo estas colunas também mas não irá utilizá-las. E quando você tem uma consulta grande, com JOIN para outras tabelas, a situação fica ainda pior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.