Как узнать тип данных 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
Типы данных (Transact-SQL)
В SQL Server у каждого столбца, локальной переменной, выражения и параметра есть определенный тип данных. Тип данных — атрибут, определяющий, какого рода данные могут храниться в объекте: целые числа, символы, данные денежного типа, метки времени и даты, двоичные строки и так далее.
SQL Server предоставляет набор системных типов данных, которые определяют все возможные типы данных для использования в SQL Server. Вы также можете определить собственные типы данных в Transact-SQL или Microsoft .NET Framework. Псевдонимы типов данных основываются на системных типах. Дополнительные сведения о псевдонимах типов данных см. в статье CREATE TYPE (Transact-SQL). Пользовательские типы данных обладают свойствами, зависящими от методов и операторов класса, который создается на одном из языков программирования, поддерживаемых .NET Framework.
При объединении одним оператором двух выражений с разными типами данных, параметрами сортировки, точностями, масштабами или длинами, результат определяется следующим образом.
- Тип данных результата определяется применением правил очередности типов данных к входным выражениям. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).
- Параметры сортировки результата определяются правилами очередности параметров сортировки, если тип данных результата — char, varchar, text, nchar, nvarchar или ntext. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL).
- Точность, масштаб и длина результата зависят от точности, масштаба и длины входных выражений. Дополнительные сведения см. в разделе Точность, масштаб и длина (Transact-SQL).
SQL Server предоставляет синонимы типов данных для совместимости со стандартом ISO. Дополнительные сведения см. в статье Синонимы типов данных (Transact-SQL).
Дополнительные сведения о типах данных в Azure Synapse Analytics см. в статье Типы данных таблицы в Synapse SQL. Дополнительные сведения о типах данных в Microsoft Fabric см. в разделе Тип данных.
Категории типов данных
Типы данных в SQL Server объединены в следующие категории:
SQL-Ex blog
Запросы SQL для изменения типа данных столбца
Добавил Sergey Moiseenko on Суббота, 23 апреля. 2022
- SQL Server 2019
- MySQL Server
- 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'

Видно, что тип данных столбца изменился.
- При уменьшении размера столбца SQL Server проверит данные в таблице и, если данные превышают новую длину, вернет предупреждение и прервет выполнение оператора.
- При изменении типа данных nvarchar на varchar, если столбец содержит строку Юникод, то SQL Server возвращает ошибку и прерывает оператор.
- В отличие от MySQL изменение типа данных нескольких столбцов не допускается.
- Вы не можете добавить
а. ограничение 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).
Обратные ссылки
Нет обратных ссылок
Комментарии
Показывать комментарии Как список | Древовидной структурой
Автор не разрешил комментировать эту запись
Как узнать тип данных в столбце sql
Приведу запрос с помощью которого можно имена полей и тип данных в таблице products:
SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = products
