Перейти к содержимому

Как посмотреть тип данных в таблице sql

  • автор:

SQL-Ex blog

Запросы SQL для изменения типа данных столбца

Добавил Sergey Moiseenko on Суббота, 23 апреля. 2022

  1. SQL Server 2019
  2. MySQL Server
  3. PostgreSQL

SQL-запрос для изменения типа столбца в базе данных SQL Server

Мы можем использовать оператор ALTER TABLE ALTER COLUMN для изменения типа столбца в таблице. Использует следующий синтаксис:

ALTER TABLE [tbl_name] ALTER COLUMN [col_name] [DATA_TYPE]
  • tbl_name: задает имя таблицы.
  • col_name: задает имя столбца, тип которого мы хотим изменить. col_name должно быть указано после ключевых слов ALTER COLUMN.
  • DATA_TYPE: задает новый тип данных и длину столбца.
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 )
)

Предположим, что вы хотите изменить тип данных [address] с varchar(max) на nvarchar(1500). Выполните следующий запрос для изменения типа столбца.

Alter table tblstudent alter column address nvarchar(1500)

Проверим изменения с помощью следующего скрипта.

use StudentDB 
go
select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS
where table_name='tblStudent'

Видно, что тип данных столбца изменился.

  1. При уменьшении размера столбца SQL Server проверит данные в таблице и, если данные превышают новую длину, вернет предупреждение и прервет выполнение оператора.
  2. При изменении типа данных nvarchar на varchar, если столбец содержит строку Юникод, то SQL Server возвращает ошибку и прерывает оператор.
  3. В отличие от MySQL изменение типа данных нескольких столбцов не допускается.
  4. Вы не можете добавить
    а. ограничение NOT NULL, если столбец содержит NULL-значения;
    б. ограничение UNIQUE, если в столбце имеются дубликаты.

Запрос SQL для изменения типа столбца в MySQL

Для изменения типа данных столбца мы можем использовать оператор ALTER TABLE MODIFY COLUMN. Синтаксис изменения типа данных столбца имеет следующий вид:

ALTER TABLE [tbl_name] MODIFY COLUMN [col_name_1] [DATA_TYPE], 
MODIFY [col_name_2] [data_type],
MODIFY [col_name_3] [data_type]
  • Tbl_name: задает имя таблицы, содержащая столбец, который мы хотим изменить.
  • Col_name: задает имя столбца, тип которого мы хотим изменить. Col_name должно быть указано после ключевых слов MODIFY COLUMN. Мы можем изменить тип данных нескольких столбцов. При изменении типа данных нескольких столбцов, столбцы разделяются запятой (,).
  • Datatype: задает новый тип данных и длину столбца. Тип данных должен указываться после имени столбца.
create table tblactor 
(
actor_id int,
first_name varchar(500),
first_name varchar(500),
address varchar(500),
CityID int,
lastupdate datetime
)

Рассмотрим несколько примеров.

Пример 1: Запрос для изменения типа данных одного столбца

Мы хотим изменить тип столбца address с varchar(500) на тип данных TEXT. Выполните следующий запрос для изменения типа данных.

mysql> ALTER TABLE tblActor MODIFY address TEXT
Для проверки изменений выполните следующий запрос:

mysql> describe tblactor

Как можно увидеть, тип данных столбца address был изменен на TEXT.

Пример 2: SQL-запрос для изменения типа данных нескольких столбцов

Мы можем изменить тип данных нескольких столбцов в таблице. В нашем примере мы хотим изменить тип столбцов first_name и last_name. Новым типом данных столбцов становится TINYTEXT.

mysql> ALTER TABLE tblActor MODIFY first_name TINYTEXT, modify last_name TINYTEXT;
Выполните следующий запрос, чтобы проверить изменения:

mysql> describe tblActor

Как видно, тип данных столбцов first_name и last_name изменился на TINYTEXT.

Пример 3: Переименование столбца в MySQL

Чтобы переименовать столбцы, мы должны использовать оператор ALTER TABLE CHANGE COLUMN. Предположим, что вы хотите переименовать столбец CityID в CityCode; вы должны выполнить следующий запрос.

mysql> ALTER TABLE tblActor CHANGE COLUMN CityID CityCode int
Выполните команду describe, чтобы увидеть изменения структуры таблицы.

Видно, что имя столбца изменилось.

Запрос SQL для изменения типа столбца в базе данных PostgreSQL

Мы можем использовать оператор ALTER TABLE ALTER COLUMN для изменения типа данных столбца. Синтаксис изменения типа данных столбца:

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]
  • Tbl_name: задает имя таблицы, содержащая столбец, который вы хотите изменить.
  • Col_name: задает имя столбца, тип которого мы хотим изменить. Col_name должно быть указано после ключевых слов ALTER COLUMN. Мы можем изменить тип данных нескольких столбцов.
  • Data_type: задает новый тип данных и длину столбца. Тип данных должен быть указан после ключевого слова TYPE.
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)
)

Теперь рассмотрим несколько примеров.

Пример 1: Запрос SQL для изменения типа данных одного столбца

Мы хотим изменить тип столбца movie_id с типа данных int4 на int8. Для изменения типа данных выполните следующий запрос.

ALTER TABLE tblmovies ALTER COLUMN movie_id TYPE BIGINT

Для проверки изменений выполните следующий запрос:

SELECT 
table_catalog,
table_name,
column_name,
udt_name,
character_maximum_length
FROM
information_schema.columns
WHERE
table_name = 'tblmovies';

Как видно, тип данных столбца movie_id стал int8.

Пример 2: Запрос SQL для изменения типа данных нескольких столбцов

Мы можем изменить тип данных сразу нескольких столбцов таблицы. В нашем примере мы хотим изменить тип столбцов movie_title и movie_producer. Новым типом данных для столбца movie_title становится TEXT, а для movie_producer — varchar(2000).

ALTER TABLE tblmovies ALTER COLUMN movie_title TYPE text, ALTER COLUMN movie_producer TYPE varchar(2000);

Выполните следующий запрос для проверки изменений:

SELECT 
table_catalog,
table_name,
column_name,
udt_name,
character_maximum_length
FROM
information_schema.columns
WHERE
table_name = 'tblmovies';

Как видно, типом данных столбца movie_title является TEXT, а movie_producer — varchar(2000).

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Автор не разрешил комментировать эту запись

Как получить список и описание всех колонок в таблице Microsoft SQL Server?

В данной заметке будет рассмотрено несколько способов получения информации о столбцах таблицы в базе данных Microsoft SQL Server, например, мы научимся получать список колонок таблицы, включая их тип данных, с помощью SQL запроса.

Список и описание колонок таблицы

Начну с того, что если Вам нужно просто визуально посмотреть, какие колонки или какой тип данных у той или иной колонке в таблице, то Вы для этого можете использовать графический функционал SQL Server Management Studio, а именно «Обозреватель объектов». Например, для того чтобы посмотреть информацию о столбцах таблицы, необходимо плюсиком открыть соответствующий контейнер.

Скриншот 1

Но если Вам необходимо выгрузить эту информацию или обработать ее в SQL инструкции, то в этом случае необходимо обращаться к системным объектам SQL Server с помощью языка SQL, как и к каким именно объектам обращаться мы сейчас и рассмотрим.

Примечание! Все примеры ниже мы будем рассматривать в Microsoft SQL Server 2016 Express. В базе данных создана тестовая таблица TestTable, она имеет всего три столбца.

Получаем список колонок таблицы с помощью представления информационной схемы

В Microsoft SQL Server существует специальная схема — INFORMATION_SCHEMA, которая содержит метаданные для всех объектов базы данных. В данной схеме есть представление COLUMNS, с помощью которого и можно получить информацию о колонках таблицы. Также в ней есть и другие полезные представления, о которых мы разговаривали в статье — «Представления информационной схемы Microsoft SQL Server».

А теперь допустим, нам нужно получить информацию о столбцах в таблице, например, имя столбца, тип данных и возможность принятия значения NULL, для этого мы напишем следующий запрос, в котором обратимся к представлению COLUMNS информационной схемы.

SELECT TABLE_NAME AS [Имя таблицы], COLUMN_NAME AS [Имя столбца], DATA_TYPE AS [Тип данных столбца], IS_NULLABLE AS [Значения NULL] FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='TestTable'

Скриншот 2

Получаем список столбцов таблицы с помощью системного представления sys.columns

Также информацию о колонках таблицы можно получить с помощью системного представления sys.columns, но только в этом случае для получения точно такого же результата, как был выше, необходимо будет объединять несколько системных представлений, а именно sys.tables, sys.columns и sys.types, так как в представлении sys.columns есть только идентификаторы нужных нам данных.

SELECT T.name AS [Имя таблицы], C.name AS [Имя столбца], DataType.name AS [Тип данных столбца], CASE WHEN C.is_nullable = 0 THEN 'NO' ELSE 'YES' END AS [Значения NULL] FROM sys.tables T LEFT JOIN sys.columns C ON T.object_id = C.object_id LEFT JOIN sys.types DataType ON C.user_type_id = DataType.user_type_id WHERE T.name='TestTable'

Скриншот 3

Получаем список колонок таблицы с помощью системной процедуры sp_columns

В SQL Server существует специальная системная процедура sp_columns, которая как раз и предназначена для получения информации о колонках таблицы.

EXEC sp_columns TestTable

Скриншот 4

Какой из рассмотренных выше способов Вам подойдет и окажется удобней решать Вам, а у меня на этом все, удачи!

Заметка! Новичкам рекомендую посмотреть мой видеокурс по T-SQL для начинающих, с помощью него Вы «с нуля» научитесь работать с SQL и программировать на T-SQL.

Как посмотреть тип данных в таблице sql

Хочу сделать запрос SELECT и четко указать тип данных столбца.

Обнаружил, что это можно сделать так:

SELECT *
LalalaFloat = CAST (LalalaInt AS float)
FROM MyTable

Есть ли другие способы решить ту же самую задачу?

Лично мне кажется, что данный способ является неидеальным, т. к. здесь речь идет не об указании типа данных для всего столбца, а является приведением конкретного значения, для конкретной строки, к определенному типу данных. Т. е. наверняка есть более умные способы решения данной задачи.

Re: Типы данных полей в SELECT, как указать?

От: GarryIV
Дата: 31.10.08 11:16
Оценка:

Здравствуйте, michag, Вы писали:

M>Лично мне кажется, что данный способ является неидеальным, т. к. здесь речь идет не об указании типа данных для всего столбца, а является приведением конкретного значения, для конкретной строки, к определенному типу данных. Т. е. наверняка есть более умные способы решения данной задачи.

Как ты себе представляешь изменение типа «столбца» не изменяя (i.e. конвертируя) каждое из значений?

WBR, Igor Evgrafov
Re[2]: Типы данных полей в SELECT, как указать?

От: michag
Дата: 31.10.08 11:39
Оценка:

Здравствуйте, GarryIV, Вы писали:

GIV>Как ты себе представляешь изменение типа «столбца» не изменяя (i.e. конвертируя) каждое из значений?

Ну, например, когда мы проектируем таблицу, мы указываем тип данных каждого поля, и делаем это явно.

Когда мы пишем скрипт вроде «SELECT 123», мы явно тип данных столбца не указываем — тип данных, видимо, сам SQL Server выбирает.

Пусть скрипт у нас такой:

SELECT CAST(123 AS float)
UNION ALL
SELECT CAST(345.345 as int)

Какой тип данных будет у столбца? Опять же, видимо, SQL Server установит тот тип, который захочет — в данном случае он выбирает почему-то int (хотя мне это кажется нелогичным, т. к. при этом часть данных теряется — число 345.345 превращается в 345).

Можно ли экплицитно указать тип данных столбца?

Re[3]: Типы данных полей в SELECT, как указать?

От: daw
Дата: 31.10.08 12:57
Оценка:

>Пусть скрипт у нас такой:
>
>SELECT CAST(123 AS float)
>UNION ALL
>SELECT CAST(345.345 as int)
>
>Какой тип данных будет у столбца?

если надо явно это указать, можно union делать в подзапросе, а тип приводить во внешенем запросе:

select cast(c as . ) from ( SELECT CAST(123 AS float) c UNION ALL SELECT CAST(345.345 as int) ) t

>Опять же, видимо, SQL Server установит тот тип,
>который захочет — в данном случае он выбирает почему-то int (хотя мне это кажется нелогичным,

результат будет иметь тип с наивысшим приоритетом (Precedence). таблица приоритетов есть в документации.
в данном случае это будет float. проверить можно так:

select sql_variant_property(c, 'BaseType') from ( SELECT CAST(123 AS float) c UNION ALL SELECT CAST(345.345 as int) ) t

>т. к. при этом часть данных теряется — число 345.345 превращается в 345).

так вы же сами делаете CAST(345.345 as int)

Posted via RSDN NNTP Server 2.1 beta
Re[4]: Типы данных полей в SELECT, как указать?

От: michag
Дата: 31.10.08 13:33
Оценка:

Здравствуйте, daw, Вы писали:

daw>результат будет иметь тип с наивысшим приоритетом (Precedence). таблица приоритетов есть в документации.

Логику понял, спасибо.

>>т. к. при этом часть данных теряется — число 345.345 превращается в 345).

daw>так вы же сами делаете CAST(345.345 as int)

Ой, это я ступил, конечно ))

Re: Типы данных полей в SELECT, как указать?

От: MasterZiv
Дата: 31.10.08 16:06
Оценка:

michag wrote:

> SELECT *
> LalalaFloat = CAST (LalalaInt AS float)
> FROM MyTable
>
> Есть ли другие способы решить ту же самую задачу?

Да вроде бы нет.

> Лично мне кажется, что данный способ является неидеальным, т. к. здесь
> речь идет не об указании типа данных для всего столбца, а является
> приведением конкретного значения, для конкретной строки, к определенному
> типу данных.

Как бы типы данных всех полей разных записей, но одного столбца, всегда
одинаковые.

Posted via RSDN NNTP Server 2.1 beta
Re[3]: Типы данных полей в SELECT, как указать?

От: MasterZiv
Дата: 31.10.08 16:07
Оценка:

michag wrote:

> Пусть скрипт у нас такой:
>
> SELECT CAST(123 AS float)
> UNION ALL
> SELECT CAST(345.345 as int)
>
> Какой тип данных будет у столбца?

А так нельзя писать, СУБД по идее ругаться должна.

Posted via RSDN NNTP Server 2.1 beta
Re[3]: Типы данных полей в SELECT, как указать?

От: Lloyd
Дата: 01.11.08 12:33
Оценка:

Здравствуйте, michag, Вы писали:

M>Пусть скрипт у нас такой:

M>SELECT CAST(123 AS float)
M>UNION ALL
M>SELECT CAST(345.345 as int)

M>Какой тип данных будет у столбца? Опять же, видимо, SQL Server установит тот тип, который захочет —

Не как захочет, а выберет значение на основе типа столбцов в первом выражении в union

Как посмотреть тип данных в таблице sql

Модификация типа данных столбца

MS SQL Server
В MS SQL Server для изменения типа данных столбцов используется предложение ALTER COLUMN инструкции ALTER TABLE.

ALTER TABLE ALTER COLUMN [ NULL | NOT NULL ]

В аргументе column_name содержит имя столбца, подлежащего изменению. Аргумент new_col_type содержит описание нового типа данных для изменяемого столбца.

Ниже приведены критерии для аргумента new_col_type изменяемого столбца:

  • Предыдущие типы данных должны быть неявно преобразуемыми в новый тип данных.
  • Аргумент new_col_type не может принадлежать к типу timestamp.
  • Если изменяемый столбец является столбцом идентификаторов, то новый тип данных должен поддерживать свойство идентификатора.

Тип данных столбцов text, ntext и image может быть изменен только следующими способами:

  • text на varchar(max), nvarchar(max) или xml
  • ntext на varchar(max), nvarchar(max) или xml
  • image в varbinary(max)

MySQL Server
В СУБД MySQL описание столбца меняется с помощью предложений CHANGE или MODIFY в операторе ALTER TABLE.

В выражении col_definition для MODIFY и CHANGE используется тот же синтаксис, что и для CREATE TABLE. Следует учитывать, что этот синтаксис включает имя столбца, а не просто его тип.

Операция CHANGE, в отличие от операции MODIFY, не только меняет тип данных, но и переименовывает столбец. Поэтому при ее использовании сначала указывается имя столбца, который будет меняться, а затем дается полностью новое объявление столбца, включая опять же его имя.

Переименовать столбец saledate в таблице tbl_sales в d_sale и изменить его тип с date на datetime. Установить атрибут NOT NULL для данного столбца

MS SQL:
/*переиенование столбца тоблицы*/
sp_rename ‘tbl_sales.saledate’, ‘d_sale’, ‘COLUMN’;
/*измениение описание столбца*/
ALTER TABLE tbl_sales ALTER COLUMN d_sale datetime NOT NULL;

MySQL:
ALTER TABLE tbl_sales CHANGE saledate d_sale datetime NOT NULL

Увеличить размерность столбцов name и lastname в таблице tbl_clients с 45 символов до 60

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *