Mysql – UNSIGNED e ZEROFILL: Para que servem

UNSIGNED e ZEROFILL: Para que servem as colunas no MySQL?

Está procurando uma ajuda para entender para que servem as colunas UNSIGNED e ZEROFILL no MySQL?

Apesar do nome Dicas de PHP, o blog também tem dicas de MySQL. Abaixo uma breve explicação das colunas UNSIGNED e ZEROFILL.

UNSIGNED no MySQL

Para todos os campos do tipo “inteiros” no MySQL, podemos definir o atributo opcional UNSIGNED. Esse atributo é usado para permitir somente valores positivos em uma coluna do banco, o que acaba gerando uma faixa numérica maior de números positivos.

Por exemplo, uma coluna do tipo INT:

  • Faixa normal: de -2147483648 a 2147483647
  • Faixa UNSIGNED: de 0 a 4294967295

Tipo TINYINT:

  • Faixa: de -128 até 127
  • Faixa UNSIGNED: 0 a 255

ZEROFILL no MySQL

Já o atributo opcional ZEROFILL, preenche espaços vazios da coluna com o número zero. Por exemplo, uma coluna que é declarada como INT(4) com a opção ZeroFill, o valor “5” é recuperado como “0005”.

Se você especificar para uma coluna numérica ZEROFILL, automaticamente o MySQL adiciona o atributo UNSIGNED a coluna.

Referência: https://dicasdephp.com.br/unsigned-zerofill-mysql/

Formatar coluna como moeda via SQL – Mysql

Formatar coluna como moeda  via SQL – Mysql

A função format no Mysql possibilita a formatação da coluna como o exemplo abaixo:

FORMAT(X,D[,locale])

 

Segue o exemplo da função para conversão do campo para “moeda” com retorno

SELECT FORMAT(‘123456’,2,‘de_DE’);

 

A localidade ‘de_DE’ deixa exatamente a moeda com o formato Brasileiro.

 

 

Referência: https://pt.stackoverflow.com/questions/170096/formato-de-moeda

 

 

Limit no agrupamento em Mysql

Limit no agrupamento em Mysql

 

Imaginamos que é necessário coletar informações agrupadas com um limite de quantidade por agrupamento, todas informações por grupo em uma única query.
Recomendo fazer a busca e gerar isso na programação ou procedure, mas o método abaixo vai fazer o que precisa, mas deixará a busca lenta dependendo do tamanho da tabela.


Exemplo: 

PRODUTO  QTD    DATA
1                    1           18/01/2018
2                    1           18/01/2018
1                    1              10/11/2017
3                    1           18/01/2018
2                    1           05/01/2018
2                    1             03/01/2018
3                    1             11/12/2017
3                    1           22/12/2017
1                    1           05/12/2017

 

Esta query somente vai fazer com que você concatene e agrupe da forma que quer um campo, mas o resultado seria para todos os registros: 

select produto , GROUP_CONCAT(data_cadastro ORDER BY data_cadastro DESC) dategroup
from teste
group by produto;

 

Agora desta forma com o SUBSTRING_INDEX, você pode definir a quantidade de informações por registro que vai querer, imaginando que você quer somente 2(dois):
select produto , SUBSTRING_INDEX(GROUP_CONCAT(data_cadastro ORDER BY data_cadastro DESC), ‘,’, 2) dategroup
from teste
group by produto;

 

 

References:
 – https://stackoverflow.com/questions/2129693/using-limit-within-group-by-to-get-n-results-per-group
 – https://stackoverflow.com/questions/43254054/php-mysql-group-concat-limit/43254096

Dicionário de Dados

Comandos SQL

SELECT
TABLE_NAME as Tabela,
COLUMN_NAME as Coluna,
DATA_TYPE as Tipo,
CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION,
NUMERIC_SCALE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = ‘acl_action’
GROUP BY COLUMN_NAME
ORDER BY  COLUMN_KEY DESC;

Referência: http://sqlfromhell.wordpress.com/category/dicionarios-de-dados/

Buscar nomes dos campos de uma Tabela – mysql

Desta maneira, pode-se buscar os campos da tabela, para uma consulta rápida ou exportação dos nomes.
Exempo:
SELECT COLUMN_NAME as coluna
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_schema = 'BANCO' and TABLE_NAME = 'TABELA'
ORDER BY ORDINAL_POSITION
;

Diferença entre UNION e UNION ALL. Operadores INTERSECT e MINUS.

Diferença entre UNION e UNION ALL. Operadores INTERSECT e MINUS.

Melhor que explicar, é mostrar um exemplo de uma vez!

Listando conteúdo do campo na tabela_1

SELECT campo_x FROM tabela_1;

campo_x
———-
01
02
03
04

Listando conteúdo do campo na tabela_2
SELECT campo_x FROM tabela_2;

campo_x
———-
01
02
03

Utilizando UNION
SELECT campo_x FROM tabela_1
UNION
SELECT campo_x FROM tabela_2;

campo_x
———-
01
02
03
04

Utilizando UNION ALL

SELECT campo_x FROM tabela_1
UNION ALL
SELECT campo_x FROM tabela_2;

campo_x
———-
01
01
02
02
03
03
04

Utilizando INTERSECT
SELECT campo_x FROM tabela_1
INTERSECT
SELECT campo_x FROM tabela_2;

campo_x
———-
01
02
03

Utilizando MINUS
SELECT campo_x FROM tabela_1
MINUS
SELECT campo_x FROM tabela_2;
campo_x
———-
04

Referências:http://www.stanford.edu/dept/itss/docs/oracle/9i/server.920/a96540/queries5a.htm#2054266
http://www.oreilly.com/catalog/mastorasql/chapter/ch07.html

Comparação de data em MySql

Estes dois métodos abaixo faz a comparação de datas com intervalos de 5 dias se baseando na data atual “NOW()”.

Método 1

WHERE To_DAYS(NOW())-TO_DAYS(campo_data) > 5 ;

 

Método 2

WHERE campo_data < NOW()-interval 5 DAY

 

Abraço a todos…