Localizar colunas por nome ou tipo de dados no SQL

Localizar colunas por nome ou tipo de dados no SQL

Neste artigo vamos ver como resolver dois problemas comuns para quem trabalha com banco de dados SQL. Vamos ver como localizar uma tabela com base no nome de um de seus campos, e vamos aprender como listar colunas de um determinado tipo de dados.

O que você vai aprender neste artigo?

* Como localizar uma tabela de acordo com o nome de uma coluna

* Como listar colunas de um determinado tipo de dados.

Os exemplos a seguir foram feitos no MySQL e no SQL SERVER

 

Localizar uma tabela de acordo com o nome de uma coluna

 

No MySQL podemos usar o INFORMATION_SCHEMA para obter informações sobre a estrutura de nosso banco de dados. O INFORMATION_SCHEMA é um banco de dados somente leitura que fornece acesso aos METADADOS do servidor, então nele você vai encontrar informações sobre a estrutura, tipo de dados e permissões das tabelas.

Na consulta a seguir vamos retornar o nome da tabela e o tipo de dados da coluna que desejamos localizar.

 

SELECT 

    table_schema,

    table_name, 

    column_name, 

    data_type,

    ordinal_position

FROM  INFORMATION_SCHEMA.COLUMNS 

WHERE column_name like "%nome%"

 

No SQL Server também existe o INFORMATION_SCHEMA, então a consulta também pode ser feita da mesma forma

 

SELECT table_schema,

    table_name, 

    column_name, 

    data_type,

    ordinal_position

FROM INFORMATION_SCHEMA.COLUMNS

WHERE COLUMN_NAME LIKE '%Nome%'

 

A consulta retornou as seguintes informações:

 

TABLE_SCHEMA - Nome do banco de dados

TABLE_NAME - Nome da tabela

COLUMN_NAME - Nome da coluna

DATA_TYPE - Tipo de dados

ORDINAL_POSITION - Ordem da coluna na tabela

 

Uma outra forma de fazer isso no SQL Server é utilizar as tabelas de sistema SYS.TABLES e SYS.COLUMNS, elas guardam informações sobre cada tabela e coluna de seu banco de dados

 

SELECT    t.name AS tabela, c.name  AS coluna

FROM        sys.columns c

JOIN        sys.tables  t   ON c.object_id = t.object_id

WHERE       c.name LIKE '%Nome%'

ORDER BY    tabela,coluna

 

 

Listar colunas de um determinado tipo de dados

 

Como vimos nos exemplos anteriores o INFORMATION_SCHEMA guarda dados sobre as estruturas das tabelas, então ele vai ser útil para identificar colunas de um determinado tipo de dados. No exemplo a seguir vamos listar colunas com o tipo de dados numérico utilizando o banco de dados MySQL

 

select col.table_schema as database_name,

       col.table_name,

       col.ordinal_position as col_id,

       col.column_name,

       col.data_type,

       col.numeric_precision,

       col.numeric_scale

from information_schema.columns col

join information_schema.tables tab on tab.table_schema = col.table_schema

and tab.table_name = col.table_name

and tab.table_type = "BASE TABLE"

where col.data_type in ("tinyint", "smallint", "mediumint",  "int", "bigint", "decimal", "bit", "float", "double")

and col.table_schema not in ("information_schema", "sys", "performance_schema", "mysql")

order by col.table_schema,  col.table_name,  col.ordinal_position

 

Perceba que para retornar o resultado fizemos o vínculo de duas tabelas, que foram information_schema.columns e information_schema.tables. Os tipos de dados númericos no MySQL são "tinyint", "smallint", "mediumint", "int", "bigint", "decimal", "bit", "float" e "double"

No SQL Server também podemos utilizar o INFORMATION_SCHEMA, a diferença vai ser os tipos de dados, que possuem nomes um pouco diferentes. No exemplo a seguir vamos listar colunas com o tipo de dados numéricos.

 

SELECT 

TABLE_CATALOG,

TABLE_SCHEMA,

TABLE_NAME, 

COLUMN_NAME, 

DATA_TYPE 

FROM INFORMATION_SCHEMA.COLUMNS 

WHERE DATA_TYPE IN ('bigint', 'int','smallint', 'tinyint', 'decimal', 'numeric','smallmoney', 'money', 'bit', 'float', 'real')

 

Os tipos de dados numéricos no SQL Server são "bigint", "int", "smallint", "tinyint", "decimal", "numeric", "smallmoney", "money", "bit", "float" e  "real"

 

Também é possível chegar no mesmo resultado no SQL Server utilizando as tabelas SYS.TABLES e SYS.COLUMNS. A seguir veremos um exemplo de como fazer isso.

 

select schema_name(t.schema_id) + '.' + t.name as tabela,

c.column_id,

c.name as coluna,

type_name(user_type_id) as tipo_dados,

max_length,

precision,

scale 

from sys.columns c

join sys.tables t

on t.object_id = c.object_id

where type_name(user_type_id) in ('bigint', 'int','smallint', 'tinyint', 'decimal', 'numeric','smallmoney', 'money', 'bit', 'float', 'real')

order by tabela, c.column_id

 

Encerramento

 

Neste artigo você viu como localizar colunas por nome ou tipo de dados no SQL.

Se este artigo foi útil, com certeza os artigos a seguir também devem despertar o seu interesse.

 

Como listar o tamanho das tabelas no SQL Server e no MySQL

Localizando tabela por data de criação com SQL Server ou MySQL

 

Outros conteudos que podem ser de seu interesse

SQL vs Mongo - Operações básicas
08/12/2019SQL

SQL vs Mongo - Operações básicas

Um comparativo entre as operações básicas no SQL e seus equivalentes no Mongo

Saiba mais...
Retornando dados do registro anterior ou seguinte com SQL
12/02/2023SQL

Retornando dados do registro anterior ou seguinte com SQL

Veja como trabalhar com as funções LAG e LEAD para retornar dados do registro anterior ou seguinte

Saiba mais...

Conteúdo sobre banco de dados sem complicação!