Como alterar o tipo de dados de uma coluna no SQL e realizar cast de dados

Ao trabalhar com bancos de dados SQL, pode haver situações em que você precisa alterar o tipo de dados de uma coluna. Por exemplo, você pode querer tratar dados armazenados como strings como números ou alterar o tipo de dados para melhorar a precisão dos dados. Neste artigo, explicaremos detalhadamente como alterar o tipo de dados de uma coluna no SQL e realizar o cast dos dados existentes de maneira apropriada, com exemplos práticos.

Índice

Conceitos básicos da alteração de tipo de dados de coluna

O método básico para alterar o tipo de dados de uma coluna no SQL é utilizando o comando ALTER TABLE. Com o comando ALTER TABLE, você pode modificar a estrutura da tabela e alterar o tipo de dados de uma coluna específica para um formato adequado.

Sintaxe básica do comando ALTER TABLE

A sintaxe básica do comando ALTER TABLE é a seguinte:

ALTER TABLE nome_da_tabela
ALTER COLUMN nome_da_coluna tipo_de_dados;

Usando essa sintaxe, você pode alterar o tipo de dados de uma coluna específica em uma tabela existente.

Exemplo: Alterando de VARCHAR para INT

Por exemplo, para alterar a coluna “age” de VARCHAR para INT, você pode usar o seguinte comando SQL:

ALTER TABLE users
ALTER COLUMN age INT;

Assim, você pode alterar o tipo de dados conforme necessário.

Pontos de atenção ao alterar tipos de dados

Existem alguns pontos importantes a serem observados ao alterar o tipo de dados de uma coluna. Se esses pontos forem ignorados, podem ocorrer perdas de dados ou erros.

Compatibilidade de dados

É importante verificar se o novo tipo de dados é compatível com os dados existentes. Por exemplo, ao alterar uma coluna de VARCHAR para INT, é necessário garantir que todos os dados armazenados como strings sejam numéricos. Caso contrário, a alteração falhará.

Exemplo: Verificando dados não numéricos

Exemplo de comando SQL para verificar dados antes de fazer a alteração:

SELECT *
FROM users
WHERE ISNUMERIC(age) = 0;

Esse comando SQL permite verificar a existência de dados não numéricos.

Truncamento de dados

Ao reduzir o tamanho do tipo de dados (por exemplo, de VARCHAR(100) para VARCHAR(50)), existe a possibilidade de truncamento de dados. É importante verificar o comprimento dos dados antes de realizar a alteração e modificar os dados conforme necessário para evitar a perda de informações.

Exemplo: Verificando o comprimento dos dados

Exemplo de comando SQL para verificar o comprimento dos dados:

SELECT *
FROM users
WHERE LEN(name) > 50;

Esse comando SQL permite verificar dados que não cabem em VARCHAR(50).

Backup de dados

Como a alteração de tipo de dados é uma operação irreversível, é recomendável fazer backup de todo o banco de dados antes de realizar a alteração. Se houver um backup, você poderá restaurar o estado original caso algo dê errado.

Uso de transações

É recomendável realizar a alteração de tipo de dados dentro de uma transação. Dessa forma, se a operação falhar no meio do caminho, o banco de dados pode ser mantido em um estado consistente.

Exemplo: Usando uma transação

Exemplo de como realizar a alteração de tipo de dados dentro de uma transação:

BEGIN TRANSACTION;

ALTER TABLE users
ALTER COLUMN age INT;

COMMIT;

Assim, você pode alterar o tipo de dados da coluna com segurança.

O que é o cast de dados?

O cast de dados é a operação de converter dados de um tipo para outro. No SQL, o cast de dados é frequentemente usado quando é necessário converter entre diferentes tipos de dados.

A importância do cast de dados

O cast de dados é importante em cenários como:

  • Transferir dados entre tabelas com diferentes formatos
  • Realizar cálculos ou comparações que exigem o mesmo tipo de dados
  • Gerar relatórios ou análises que exigem tipos de dados específicos

Cast implícito e cast explícito

No SQL, existem dois tipos de cast: implícito e explícito.

Cast implícito

O cast implícito ocorre quando o mecanismo SQL converte automaticamente o tipo de dados. Por exemplo, ao tratar dados numéricos como strings.

SELECT 'The age is ' + age
FROM users;

Nesse caso, age é convertido automaticamente de um tipo numérico para string.

Cast explícito

O cast explícito ocorre quando você especifica claramente a conversão de tipo de dados em uma instrução SQL, utilizando as funções CAST ou CONVERT.

Exemplo: Usando a função CAST

Exemplo de como usar a função CAST para converter o tipo de dados:

SELECT CAST(age AS VARCHAR(3)) AS age_str
FROM users;

Neste comando SQL, o age do tipo numérico é convertido para o tipo string.

Exemplo: Usando a função CONVERT

Exemplo de como usar a função CONVERT para converter o tipo de dados:

SELECT CONVERT(VARCHAR, age) AS age_str
FROM users;

Neste comando SQL, o age do tipo numérico é convertido para o tipo string.

Utilizando o cast de dados corretamente, você pode manipular os dados de forma flexível enquanto mantém a integridade dos mesmos.

Como usar a função CAST

A função CAST do SQL permite converter dados de um tipo para outro explicitamente. A função CAST é muito útil em diferentes operações de banco de dados e na criação de relatórios.

Sintaxe básica da função CAST

A sintaxe básica da função CAST é a seguinte:

CAST (expressão AS tipo_de_dados)

Aqui, expressão é o dado a ser convertido e tipo_de_dados é o tipo para o qual você deseja converter.

Exemplo: Convertendo de número para string

No exemplo abaixo, a coluna age é convertida de um tipo numérico para string:

SELECT CAST(age AS VARCHAR(3)) AS age_str
FROM users;

Este comando SQL converte os dados numéricos da coluna age para uma string com comprimento 3 e os exibe na nova coluna age_str.

Convertendo para diferentes tipos de dados

A função CAST pode ser usada para conversões entre vários tipos de dados. Aqui estão alguns exemplos.

Convertendo string para data

Exemplo de conversão de dados de string para data:

SELECT CAST('2024-05-31' AS DATE) AS formatted_date;

Nesse comando SQL, a string '2024-05-31' é convertida para o tipo de dado DATE e exibida como formatted_date.

Convertendo string para número

Exemplo de conversão de dados de string para número:

SELECT CAST('12345' AS INT) AS number_value;

Nesse comando SQL, a string '12345' é convertida para o tipo de dado INT e exibida como number_value.

Exemplo de aplicação da função CAST

A função CAST é especialmente útil em operações de filtragem e agregação de dados.

Exemplo: Usando em operações de agregação

Por exemplo, ao converter uma coluna de string para um número e depois somar os valores:

SELECT SUM(CAST(price AS DECIMAL(10, 2))) AS total_price
FROM sales;

Nesse comando SQL, a coluna price é convertida de string para um número decimal e, em seguida, o valor total é calculado e exibido como total_price.

Pontos de atenção ao usar a função CAST

Ao usar a função CAST, é importante prestar atenção à compatibilidade entre os tipos de dados. Tentar converter para um tipo incompatível pode gerar erros. Além disso, o uso frequente de casts em grandes conjuntos de dados pode impactar a performance.

Usar a função CAST adequadamente pode aumentar a flexibilidade das operações de dados, permitindo a conversão simples entre diferentes tipos de dados.

Como usar a função CONVERT

A função CONVERT do SQL é outro método para alterar tipos de dados. A função CONVERT é semelhante à função CAST, mas pode oferecer mais opções ou formatos dependendo do sistema de banco de dados.

Sintaxe básica da função CONVERT

A sintaxe básica da função CONVERT é a seguinte:

CONVERT(tipo_de_dados, expressão, estilo)

Aqui, tipo_de_dados é o tipo de dados para o qual você deseja converter, expressão é o dado a ser convertido, e estilo é uma opção para especificar o formato.

Exemplo: Convertendo número para string

No exemplo abaixo, a coluna age é convertida de um tipo numérico para string:

SELECT CONVERT(VARCHAR, age) AS age_str
FROM users;

Este comando SQL converte os dados numéricos da coluna age para string e exibe na nova coluna age_str.

Convertendo para diferentes tipos de dados

A função CONVERT, assim como a função CAST, pode ser usada para conversões entre vários tipos de dados. Aqui estão alguns exemplos.

Convertendo string para data

Exemplo de conversão de string para data:

SELECT CONVERT(DATE, '2024-05-31') AS formatted_date;

Nesse comando SQL, a string '2024-05-31' é convertida para o tipo de dado DATE e exibida como formatted_date.

Convertendo string para número

Exemplo de conversão de string para número:

SELECT CONVERT(INT, '12345') AS number_value;

Nesse comando SQL, a string '12345' é convertida para o tipo de dado INT e exibida como number_value.

Usando opções de estilo

A função CONVERT pode fornecer opções de estilo para tipos de dados específicos. Isso é especialmente útil ao converter para o tipo de dados DATE.

Exemplo: Especificando o estilo da data

Por exemplo, ao converter dados de string para uma data com um formato específico:

SELECT CONVERT(VARCHAR, GETDATE(), 23) AS formatted_date;

Nesse comando SQL, a data e hora atual é convertida em uma string no formato YYYY-MM-DD (estilo 23) e exibida como formatted_date.

Exemplo de aplicação da função CONVERT

A função CONVERT é especialmente útil para converter dados que exigem formatos ou estilos específicos.

Exemplo: Convertendo dados monetários

Por exemplo, ao converter dados monetários para um formato específico:

SELECT CONVERT(VARCHAR, CAST(12345.67 AS MONEY), 1) AS formatted_currency;

Nesse comando SQL, os dados numéricos são convertidos para o formato monetário com separadores de milhar e exibidos como formatted_currency.

Pontos de atenção ao usar a função CONVERT

Ao usar a função CONVERT, é importante verificar a compatibilidade entre os tipos de dados de origem e destino. Além disso, ao usar opções de estilo, é recomendável verificar na documentação do banco de dados se o estilo desejado é suportado.

Usar a função CONVERT de forma adequada permite realizar conversões de dados detalhadas e flexíveis, mantendo a consistência e legibilidade dos dados.

Exemplos práticos de código SQL

Aqui estão exemplos práticos de como alterar o tipo de dados de colunas e realizar cast de dados utilizando SQL. Esses exemplos ajudam a entender tanto a teoria quanto a prática.

Exemplo 1: Alterando o tipo de dados de VARCHAR para INT e realizando cast

Primeiro, vamos mostrar um exemplo de como alterar uma coluna do tipo VARCHAR para INT.

-- Criando a tabela
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    age VARCHAR(3)
);

-- Inserindo os dados
INSERT INTO users (user_id, age)
VALUES (1, '25'), (2, '30'), (3, '45');

-- Verificando os dados antes de alterar o tipo de dados
SELECT * FROM users;

-- Realizando o cast dos dados
UPDATE users
SET age = CAST(age AS INT);

-- Alterando o tipo de dados da coluna
ALTER TABLE users
ALTER COLUMN age INT;

-- Verificando os dados após a alteração
SELECT * FROM users;

Neste exemplo, primeiro criamos a tabela users e inserimos dados na coluna age com o tipo VARCHAR. Em seguida, realizamos o cast dos dados dessa coluna para INT, e finalmente usamos o comando ALTER TABLE para alterar o tipo de dados da coluna.

Exemplo 2: Convertendo string para tipo de dado DATE

Agora, um exemplo de como converter dados do tipo string para o tipo DATE.

-- Criando a tabela
CREATE TABLE events (
    event_id INT PRIMARY KEY,
    event_date VARCHAR(10)
);

-- Inserindo os dados
INSERT INTO events (event_id, event_date)
VALUES (1, '2024-05-31'), (2, '2024-06-01'), (3, '2024-07-15');

-- Verificando os dados antes de alterar o tipo de dados
SELECT * FROM events;

-- Realizando o cast dos dados
UPDATE events
SET event_date = CAST(event_date AS DATE);

-- Alterando o tipo de dados da coluna
ALTER TABLE events
ALTER COLUMN event_date DATE;

-- Verificando os dados após a alteração
SELECT * FROM events;

Neste exemplo, criamos a tabela events, inserimos dados na coluna event_date do tipo string, realizamos o cast desses dados para o tipo DATE e alteramos o tipo de dados da coluna.

Exemplo 3: Convertendo número para string e concatenando

Por último, um exemplo de como converter dados numéricos para string e concatená-los com outros textos.

-- Criando a tabela
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    price DECIMAL(10, 2)
);

-- Inserindo os dados
INSERT INTO products (product_id, price)
VALUES (1, 99.99), (2, 149.50), (3, 299.99);

-- Convertendo número para string e concatenando
SELECT product_id, 'Price: ' + CAST(price AS VARCHAR(10)) AS price_label
FROM products;

Neste exemplo, criamos a tabela products, inserimos dados na coluna price do tipo DECIMAL, realizamos o cast desses dados para VARCHAR e os concatenamos com outro texto, exibindo o resultado como uma nova coluna price_label.

Com esses exemplos, você pode entender claramente como alterar tipos de dados de colunas no SQL e realizar o cast de dados. Pratique esses exemplos para adquirir uma compreensão mais profunda.

Exemplos avançados e exercícios

Aqui estão alguns exemplos avançados e exercícios para você aplicar o que aprendeu sobre alteração de tipos de dados de colunas e cast de dados.

Exemplo avançado 1: Alterando tipos de dados de várias colunas

Ao alterar os tipos de dados de várias colunas, você deve usar o comando ALTER COLUMN para cada coluna individualmente.

-- Criando a tabela
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date VARCHAR(10),
    total_amount VARCHAR(10)
);

-- Inserindo os dados
INSERT INTO orders (order_id, order_date, total_amount)
VALUES (1, '2024-05-31', '150.50'), (2, '2024-06-01', '200.00'), (3, '2024-07-15', '99.99');

-- Realizando o cast dos dados
UPDATE orders
SET order_date = CAST(order_date AS DATE),
    total_amount = CAST(total_amount AS DECIMAL(10, 2));

-- Alterando os tipos de dados das colunas
ALTER TABLE orders
ALTER COLUMN order_date DATE,
ALTER COLUMN total_amount DECIMAL(10, 2);

-- Verificando os dados após a alteração
SELECT * FROM orders;

Neste exemplo, alteramos a coluna order_date de string para o tipo de dados DATE e a coluna total_amount de string para o tipo de dados DECIMAL.

Exemplo avançado 2: Combinando CASE e CAST

Exemplo de como usar a função CASE para realizar cast com base em condições específicas.

-- Criando a tabela
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    salary VARCHAR(10)
);

-- Inserindo os dados
INSERT INTO employees (employee_id, salary)
VALUES (1, '50000'), (2, '60000'), (3, '70K');

-- Realizando o cast de dados com base em condições
SELECT employee_id,
       CASE
           WHEN ISNUMERIC(salary) = 1 THEN CAST(salary AS INT)
           ELSE NULL
       END AS salary_int
FROM employees;

Neste exemplo, a coluna salary é convertida para INT apenas quando os dados forem numéricos, retornando NULL caso contrário.

Exercícios

Tente resolver os exercícios abaixo.

Exercício 1: Alterando tipo de dados e realizando cast

Você tem uma tabela chamada students com as seguintes colunas:

  • student_id (INT)
  • birthdate (VARCHAR(10))
  • score (VARCHAR(5))

Altere o tipo de dados dessas colunas conforme abaixo:

  • Alterar birthdate para o tipo de dados DATE
  • Alterar score para o tipo de dados FLOAT

Escreva um comando SQL para verificar os dados após a alteração.

Exercício 2: Combinando CASE e CAST

Você tem uma tabela chamada products com as seguintes colunas:

  • product_id (INT)
  • price (VARCHAR(10))

Escreva um comando SQL que converta a coluna price para INT quando os dados forem inteiros e para FLOAT quando forem decimais, e exiba o resultado em uma nova coluna chamada price_cast.

Esses exercícios irão ajudar a aprofundar sua compreensão sobre como alterar tipos de dados de colunas e realizar cast no SQL.

Conclusão

Neste artigo, aprendemos como alterar o tipo de dados de uma coluna e realizar cast de dados no SQL. Desde os passos básicos para alterar o tipo de dados com o comando ALTER TABLE até exemplos específicos de como usar as funções CAST e CONVERT para realizar o cast de dados. Também exploramos exemplos avançados, como alterar várias colunas ao mesmo tempo e combinar CASE com CAST. Finalmente, oferecemos exercícios práticos para aplicar esses conceitos e aprimorar suas habilidades.

Alterar tipos de dados corretamente é uma habilidade importante para manter a integridade dos dados e garantir que seu banco de dados funcione de forma eficiente. Use essas técnicas em suas tarefas diárias de administração e desenvolvimento de bancos de dados para melhorar a flexibilidade e o desempenho do sistema.

Índice