This article covers the different SQL queries to change the column type. We are going to learn how we can change the data type of the columns of the following databases:
- SQL Server 2019
- MySQL Server
- PostgreSQL
SQL query to change the column type in SQL Server database
We can use ALTER TABLE ALTER COLUMN statement to change the column type of the table. The syntax to change the column type is following:
1 |
ALTER TABLE [tbl_name] ALTER COLUMN [col_name_1] [DATA_TYPE] |
In the syntax,
- Tbl_name: Specify the table name
- Col_name: Specify the column name whose datatype you want to change. The col_name must be specified after the ALTER COLUMN keyword
- Datatype: Specify the new datatype and length of the column
For demonstration, I have created a table named tblStudent.
1 2 3 4 5 6 7 8 9 10 11 12 |
CREATE TABLE [dbo].[tblstudent] ( [id] [INT] IDENTITY(1, 1) NOT NULL, [student_code] [VARCHAR](20) NOT NULL, [student_firstname] [VARCHAR](250) NOT NULL, [student_lastname] [VARCHAR](10) NOT NULL, [address] [VARCHAR](max) NULL, [city_code] [VARCHAR](20) NOT NULL, [school_code] [VARCHAR](20) NULL, [admissiondate] [DATETIME] NULL, CONSTRAINT [PK_ID] PRIMARY KEY CLUSTERED ( [id] ASC ) ) |
Suppose you want to change the data type of [address] from varchar(max) to nvarchar(1500). Run the following query to change the column type.
1 |
Alter table tblstudent alter column address nvarchar(1500) |
Verify the changes by running following script.
1 2 3 4 |
use StudentDB go select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS where table_name='tblStudent' |
As you can see, the column data type has been changed.
Important Notes:
- When we decrease the size of the column, the SQL Server will check the data of the table, and if the length of the data is higher than the new length, it returns the warning and terminate the statement
- When you change the datatype from nvarchar to varchar, and the column contains the Unicode string, then SQL Server returns the error and terminates the statement
- Unlike MySQL, the changing datatype of multiple columns is not allowed
-
You cannot add
- NOT NULL constraint if the column contains the NULL values
- UNIQUE constraint if the column has duplicate values
SQL query to change the column type in MySQL Server
We can use ALTER TABLE MODIFY COLUMN statement to change the datatype of the column. The syntax to change the datatype of the column is following.
1 2 3 |
ALTER TABLE [tbl_name] MODIFY COLUMN [col_name_1] [DATA_TYPE], MODIFY [col_name_2] [data_type], MODIFY [col_name_3] [data_type] |
In the syntax,
- Tbl_name: Specify the table name that contains the column that you want to change
- Col_name: Specify the column name whose datatype you want to change. The col_name must be specified after the MODIFY COLUMN keyword. We can change the data type of multiple columns. When we change the datatype of multiple columns, each column must be separated with a comma (,)
- Datatype: Specify the new datatype and length of the column. The datatype must be specified after the column name
For demonstration, I have created a table named tblactor in DemoDatabase. The code to create the table is the following
1 2 3 4 5 6 7 8 9 |
create table tblactor ( actor_id int, first_name varchar(500), first_name varchar(500), address varchar(500), CityID int, lastupdate datetime ) |
Now, let us understand the concept using a few examples.
Example 1: SQL query to change the datatype of one column
We want to change the column type of the address column from varchar(500) to TEXT datatype. Run the following query to change the datatype.
1 |
mysql> ALTER TABLE tblActor MODIFY address TEXT |
Run the following query to verify the changes:
1 |
mysql> describe tblactor |
As you can see, the datatype of the address column has been changed to TEXT.
Example 2: SQL query to change the datatype of multiple columns
We can change the datatype of multiple columns of a table. In our example, we want to change the column type of the first_name and last_name. The new datatype of the columns is varchar(200).
1 |
mysql> ALTER TABLE tblActor MODIFY first_name TINYTEXT, modify last_name TINYTEXT; |
Run the following query to verify the changes:
1 |
mysql> describe tblActor |
As you can see, the datatype of the first_name and last_name column has been changed to TINYTEXT.
Example 3: Rename the column in MySQL Server
To rename the columns, we must use ALTER TABLE CHANGE COLUMN statement. Suppose you want to rename the column CityID to CityCode, you must execute the following query.
1 |
mysql> ALTER TABLE tblActor CHANGE COLUMN CityID CityCode int |
Run the describe command to view the changes in table structure.
As you can see, the column name has been changed.
SQL query to change the column type in PostgreSQL database
We can use ALTER TABLE ALTER COLUMN statement to change the datatype of the column. The syntax to change the datatype of the column is the following.
1 2 3 |
ALTER TABLE [tbl_name] ALTER COLUMN [col_name_1] TYPE [DATA_TYPE], ALTER COLUMN [col_name_2] TYPE [data_type], ALTER COLUMN [col_name_3] TYPE [data_type] |
In the syntax,
- Tbl_name: Specify the table name that contains the column that you want to change
- Col_name: Specify the column name whose datatype you want to change. The col_name must be specified after the ALTER COLUMN keyword. We can change the data type of multiple columns
- Datatype: Specify the new datatype and length of the column. The datatype must be specified after the TYPE keyword
For demonstration, I have created a table named tblmovies in DemoDatabase. The code to create the table is the following.
1 2 3 4 5 6 7 8 9 10 |
create table tblmovies ( movie_id int, Movie_Title varchar(500), Movie_director TEXT, Movie_Producer TEXT, duraion int, Certificate varchar(5), rent numeric(10,2) ) |
Now, let us understand the concept using a few examples.
Example 1: SQL query to change the datatype of one column
We want to change the column type of the movie_id column from int4 to int8 data type. Run the following query to change the datatype.
1 |
ALTER TABLE tblmovies ALTER COLUMN movie_id TYPE BIGINT |
Run the following query to verify the changes:
1 2 3 4 5 6 7 8 9 10 |
SELECT table_catalog, table_name, column_name, udt_name, character_maximum_length FROM information_schema.columns WHERE table_name = 'tblmovies'; |
As you can see, the datatype of the movie_id column has been changed to int8.
Example 2: SQL query to change the datatype of multiple columns
We can change the datatype of multiple columns of a table. In our example, we want to change the column type of the movie_title and movie_director. The new datatype of the movie_title columns is TEXT, and the new datatype of movie_producer is varchar(2000).
1 |
ALTER TABLE tblmovies ALTER COLUMN movie_title TYPE text, ALTER COLUMN movie_producer TYPE varchar(2000); |
Run the following query to verify the changes:
1 2 3 4 5 6 7 8 9 10 |
SELECT table_catalog, table_name, column_name, udt_name, character_maximum_length FROM information_schema.columns WHERE table_name = 'tblmovies'; |
As you can see, the datatype of the movie_title columns is TEXT, and the datatype of movie_producer is varchar(2000).
Summary
In this article, we learned how we could change the data type of the columns in SQL Server 2019, MySQL Server, and PostgreSQL.
- Different ways to identify and change compatibility levels in SQL Server - July 22, 2024
- Copy SQL Databases between Windows 10 and CentOS using SQL Server data tools - October 19, 2022
- Changing the location of FILESTREAM data files in SQL Database - October 14, 2022