Типы char и varchar (transact-sql)char and varchar (transact-sql)

Типы данных MySQL

В MySQL есть три основных типа данных: текст, число и дата.


Текстовые типы данных:

Тип данных Описание
CHAR(size) Содержит строку фиксированной длины (может содержать буквы, цифры и специальные символы). Фиксированный размер указывается в скобках. Может хранить до 255 символов
VARCHAR(size) Содержит строку переменной длины (может содержать буквы, цифры и специальные символы). Максимальный размер указывается в скобках. Может хранить до 255 символов. Примечание: Если поместить большее значение, чем 255, оно будет преобразовано в текстовый тип
TINYTEXT Содержит строку с максимальной длиной 255 символов
TEXT Содержит строку с максимальной длиной 65 535 символов
BLOB Для BLOB-объектов (двоичные большие объекты). Удерживает до 65 535 байт данных
MEDIUMTEXT Содержит строку с максимальной длиной 16 777 215 символов
MEDIUMBLOB Для BLOB-объектов (двоичные большие объекты). Удерживает до 16 777 215 байт данных
LONGTEXT Содержит строку с максимальной длиной 4 294 967 295 символов
LONGBLOB Для BLOB-объектов (двоичные большие объекты). Удерживает до 4 294 967 295 байт данных
ENUM(x,y,z,etc.) Позволяет ввести список возможных значений. В списке Enum можно вывести до 65535 значений. Если вставленное значение отсутствует в списке, будет вставлено пустое значение.

Примечание: Значения сортируются в порядке их ввода.

Вы вводите возможные значения в этом формате: Enum (‘ X ‘, ‘ Y ‘, ‘ Z ‘)
SET Аналогично Enum, за исключением того, что набор может содержать до 64 элементов списка и может хранить более одного выбора

Типы данных чисел:

Тип данных Описание
TINYINT(size) -128 до 127 нормальный. 0 до 255 неподписанный *. Максимальное количество цифр может быть указано в скобках
SMALLINT(size) -32768 до 32767 нормальный. 0 до 65535 неподписанный *. Максимальное количество цифр может быть указано в скобках
MEDIUMINT(size) -8388608 до 8388607 нормальный. 0 до 16777215 неподписанный *. Максимальное количество цифр может быть указано в скобках
INT(size) -2147483648 до 2147483647 нормальный. 0 до 4294967295 неподписанный *. Максимальное количество цифр может быть указано в скобках
BIGINT(size) -9223372036854775808 до 9223372036854775807 в норме. 0 для 18446744073709551615 неподписанных *. Максимальное количество цифр может быть указано в скобках
FLOAT(size,d) Небольшое число с плавающей запятой. Максимальное количество цифр может быть указано в параметре size. Максимальное число цифр справа от десятичной запятой указано в параметре d
DOUBLE(size,d) Большое число с плавающей запятой. Максимальное количество цифр может быть указано в параметре size. Максимальное число цифр справа от десятичной запятой указано в параметре d
DECIMAL(size,d) Значение типа Double, хранящееся в виде строки и допускающее фиксированную десятичную точку. Максимальное количество цифр может быть указано в параметре size. Максимальное число цифр справа от десятичной запятой указано в параметре d

* целочисленные типы имеют дополнительный параметр, называемый неподписанным. Как правило, целое число переходит от отрицательного к положительному значению. Добавление неподписанного атрибута будет перемещаться, что диапазон вверх, поэтому он начинается с нуля, а не отрицательное число.

Типы данных дат:

Тип данных Описание
DATE() Свидание. Формат: гггг-мм-DD

Примечание: Поддерживаемый диапазон от ‘ 1000-01-01 ‘ до ‘ 9999-12-31 ‘

DATETIME() * комбинация даты и времени. Формат: гггг-мм-DD HH: MI: SS

Примечание: Поддерживаемый диапазон от ‘ 1000-01-01 00:00:00 ‘ до ‘ 9999-12-31 23:59:59 ‘

TIMESTAMP() * Временная метка. Значения timestamp хранятся в виде количества секунд со времени Unix (‘ 1970-01-01 00:00:00 ‘ UTC). Формат: гггг-мм-DD HH: MI: SS

Примечание: Поддерживаемый диапазон от ‘ 1970-01-01 00:00:01 ‘ UTC до ‘ 2038-01-09 03:14:07 ‘ UTC

TIME() Время. Формат: HH: MI: SS

Примечание: Поддерживаемый диапазон от ‘-838:59:59 ‘ до ‘ 838:59:59 ‘

YEAR() Год в формате с двумя или четырьмя цифрами.

Примечание: Допустимые значения в формате четырех цифр: 1901 до 2155. Допустимые значения в формате с двумя цифрами: 70 до 69, представляющие годы с 1970 по 2069

* даже если DateTime и timestamp возвращаются в том же формате, они работают очень по-разному. В запросе INSERT или Update временная метка автоматически устанавливает текущую дату и время. TIMESTAMP также принимает различные форматы, такие как ииииммддххмисс, ииммддххмисс, ГГГГММДД или YYMMDD.

Числовые типы данных

Как и следовало ожидать по их названию, числовые типы данных применяются для представления чисел. Эти типы и их краткое описание приводятся в таблице ниже:

Числовые типы данных T-SQL
Тип данных Описание
INTEGER

Представляет целочисленные значения длиной в 4 байта в диапазоне от -232 до 232 — 1. INT — сокращенная форма от INTEGER.

SMALLINT

Представляет целочисленные значения длиной в 2 байта в диапазоне от -32 768 до 32 767

TINYINT

Представляет целочисленные значения длиной в 1 байт в диапазоне от 0 до 255

BIGINT

Представляет целочисленные значения длиной в 8 байт в диапазоне от -263 до 263 — 1

DECIMAL(p,)

Представляет значения с фиксированной точкой. Аргумент p (precision — точность) указывает общее количество разрядов, а аргумент s (scale — степень) — количество разрядов справа от полагаемой десятичной точки. В зависимости от значения аргумента p, значения decimal сохраняются в 5 до 17 байтах. DEC — сокращенная форма от DECIMAL.

NUMERIC(p,)

Синоним DECIMAL.

REAL

Применяется для представления значений с плавающей точкой. Диапазон положительных значений простирается приблизительно от 2,23E -308 до -1,18E -38. Также может быть представлено и нулевое значение.

FLOAT

Подобно типу REAL, представляет значения с плавающей точкой . Аргумент p определяет точность. При значении p < 25 представляемые значения имеют одинарную точность (требуют 4 байта для хранения), а при значении p >= 25 — двойную точность (требуют 8 байтов для хранения).

MONEY

Используется для представления денежных значений. Значения типа MONEY соответствуют 8-байтовым значениям типа DECIMAL, округленным до четырех разрядов после десятичной точки

SMALLMONEY

Представляет такие же значения, что и тип MONEY, но длиной в 4 байта

ПримерыExamples

A.A. Сравнение OR и INComparing OR and IN

В следующем примере осуществляется выборка списка имен сотрудников на должностях инженеров-разработчиков, разработчиков средств и сотрудников отдела сбыта.The following example selects a list of the names of employees who are design engineers, tool designers, or marketing assistants.

Этот же результат можно получить при помощи оператора IN.However, you retrieve the same results by using IN.

Ниже представлен результирующий набор, возвращаемый каждым из запросов.Here is the result set from either query.

Б.B. Применение IN с вложенным запросомUsing IN with a subquery

В следующем примере осуществляется поиск идентификаторов менеджеров по продажам в таблице , имеющих объем продаж более 250 000 долларов в год, а затем выборка из таблицы имен и фамилий всех сотрудников, идентификаторы которых совпадают с результатами вложенного запроса .The following example finds all IDs for the salespeople in the table for employees who have a sales quota greater than $250,000 for the year, and then selects from the table the names of all employees where that match the results from the subquery.

Результирующий набор:Here is the result set.

В.C. Применение NOT IN с вложенным запросомUsing NOT IN with a subquery

В следующем примере производится поиск торговцев, квота которых не выше 250 000 долларов США.The following example finds the salespersons who do not have a quota greater than $250,000. С помощью можно найти торговцев, которые не соответствуют списку значений. finds the salespersons who do not match the items in the values list.

Тип SIMPLE_INTEGER

Тип появился в Oracle11g. Он представляет собой оптимизированную по быстродействию версию с некоторыми ограничениями. Тип имеет такой же диапазон значений, как (от −2 147 483 648 до 2 147 483 647), но не поддерживает и не проверяет условия переполнения. Казалось бы, зачем использовать этот неполноценный дубликат ? Если ваша программа компилируется в машинный код, а ситуация такова, что и переполнение исключены, тип обеспечит значительно лучшее быстродействие. Рассмотрим следующий пример: 

/* Файл в Сети: simple_integer_demo.sql */
-- Начнем с создания процедуры, требующей большого объема
-- вычислений, с использованием PLS_INTEGER
CREATE OR REPLACE PROCEDURE pls_test (iterations IN PLS_INTEGER)
AS
int1     PLS_INTEGER := 1;
int2     PLS_INTEGER := 2;
begints  timestamp;
endts    timestamp;
BEGIN
begints := SYSTIMESTAMP;
FOR cnt IN 1 .. iterations
LOOP
int1 := int1 + int2 * cnt;
END LOOP;
endts := SYSTIMESTAMP;
DBMS_OUTPUT.put_line( iterations
|| ' итераций за время:'
|| TO_CHAR (endts - begints));
END;
/
-- Затем та же процедура создается с использованием SIMPLE_INTEGER
CREATE OR REPLACE PROCEDURE simple_test (iterations IN SIMPLE_INTEGER)
AS
int1       SIMPLE_INTEGER := 1;
int2       SIMPLE_INTEGER := 2;
begints    timestamp;
endts      timestamp;
BEGIN
begints := SYSTIMESTAMP;
FOR cnt IN 1 .. iterations
LOOP
int1 := int1 + int2 * cnt;
END LOOP;
endts := SYSTIMESTAMP;
DBMS_OUTPUT.put_line( iterations
|| ' итераций за время:'
|| TO_CHAR (endts - begints));
END;
/
-- Сначала процедуры перекомпилируются в режиме интерпретации
ALTER PROCEDURE pls_test COMPILE PLSQL_CODE_TYPE=INTERPRETED;
/
ALTER PROCEDURE simple_test COMPILE PLSQL_CODE_TYPE=INTERPRETED
/
-- Сравнить время выполнения
BEGIN pls_test(123456789); END;
/
123456789 итераций за время:+000000000 00:00:06.375000000
BEGIN simple_test(123456789); END;
/
123456789 итераций за время:+000000000 00:00:06.000000000
-- Перекомпиляция в машинный код
ALTER PROCEDURE pls_test COMPILE PLSQL_CODE_TYPE=NATIVE
/
ALTER PROCEDURE simple_test COMPILE PLSQL_CODE_TYPE= NATIVE
/
-- Сравнение времени выполнения
BEGIN pls_test(123456789); END;
/
123456789 итераций за время:+000000000 00:00:03.703000000
BEGIN simple_test(123456789); END;
/
123456789 итераций за время:+000000000 00:00:01.203000000

Из этого примера видно, что тип обеспечивает небольшое преимущество по быстродействию интерпретируемого кода (6% в тесте на сервере Microsoft Windows). Оба типа, и быстрее работают при компиляции в машинный код, но в «машинном» варианте , работает на 300% быстрее, чем ! В качестве упражнения проведите этот тест с типом — я обнаружил, что превосходит по производительности на 1000%. На сервере Linux с Oracle Database 11g Release 2 аналогичные различия в производительности наблюдались при использовании (часто на несколько сотен процентов быстрее, чем с альтернативными числовыми типами).

Создание таблицыCreate a Table

Область применения: SQL Server База данных SQL Azure Azure Synapse Analytics (Хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Чтобы создать таблицу, нужно указать имя таблицы, имена и типы данных для каждого столбца таблицы.To create a table, you must provide a name for the table, and the names and data types of each column in the table. Также рекомендуется указывать, допускаются ли значения NULL для каждого из столбцов.It is also a good practice to indicate whether null values are allowed in each column. Для создания таблицы необходимо иметь разрешение и разрешение для схемы, которая будет содержать таблицу.To create a table, you must have the permission, and the permission on the schema that will contain the table. Предопределенная роль базы данных имеет эти разрешения.The fixed database role has these permissions.

Большинство таблиц имеют первичный ключ, состоящий из одной или нескольких столбцов таблицы.Most tables have a primary key, made up of one or more columns of the table. Первичный ключ всегда уникален.A primary key is always unique. Компонент Компонент Database EngineDatabase Engine потребует выполнения условия неповторения значения первичного ключа в таблице.The Компонент Database EngineDatabase Engine will enforce the restriction that any primary key value cannot be repeated in the table.

Список типов данных и ссылки на их описание см. в разделе Типы данных (Transact-SQL).For a list of data types and links for a description of each, see Data Types (Transact-SQL).

Примечание

Компонент Компонент Database EngineDatabase Engine может быть установлен с учетом регистра и без учета регистра.The Компонент Database EngineDatabase Engine can be installed as case sensitive or non-case sensitive. Если компонент Компонент Database EngineDatabase Engine установлен с учетом регистра, имена объектов должны иметь одно и тоже имя.If the Компонент Database EngineDatabase Engine is installed as case sensitive, object names must always have the same case. Например, таблица с именем OrderData будет отличаться от таблицы ORDERDATA.For example, a table named OrderData is a different table from a table named ORDERDATA. Если компонент Компонент Database EngineDatabase Engine установлен без учета регистра, эти два имени таблицы будут рассматриваться как одна таблица, то есть имя может быть использовано только один раз.If the Компонент Database EngineDatabase Engine is installed as non-case sensitive, those two table names are considered to be the same table, and that name can only be used one time.

Создание таблицыCreate the table

В окне редактора запросов введите и выполните следующий код, чтобы создать таблицу .In a Query Editor window, type and execute the following code to create a table named . Столбцы таблицы имеют имена , , и .The columns in the table are named , , , and . Столбец является первичным ключом таблицы.The column is the primary key of the table. , , и ., , , and are all data types. Только столбцы и могут быть пустыми при вставке или изменении строки.Only the and columns can have no data when a row is inserted or changed. Данная инструкция содержит необязательный элемент (), называемый схемой.This statement contains an optional element () called a schema. Схема — это объект базы данных, к которому принадлежит таблица.The schema is the database object that owns the table. Если вы являетесь администратором, схемой по умолчанию будет схема .If you are an administrator, is the default schema. означает владельца базы данных. stands for database owner.

DDL – Data Definition Language (язык описания данных)

Табельный номер ФИО Дата рождения E-mail Должность Отдел
1000 Иванов И.И. 19.02.1955 i.ivanov@test.tt Директор Администрация
1001 Петров П.П. 03.12.1983 p.petrov@test.tt Программист ИТ
1002 Сидоров С.С. 07.06.1976 s.sidorov@test.tt Бухгалтер Бухгалтерия
1003 Андреев А.А. 17.04.1982 a.andreev@test.tt Старший программист ИТ
  • Табельный номер – целое число
  • ФИО – строка
  • Дата рождения – дата
  • E-mail – строка
  • Должность – строка
  • Отдел – строка

Значение Обозначение в MS SQL Описание Строка переменной длины varchar(N) и nvarchar(N) При помощи числа N, мы можем указать максимально возможную длину строки для соответствующего столбца. Например, если мы хотим сказать, что значение столбца «ФИО» может содержать максимум 30 символов, то необходимо задать ей тип nvarchar(30). Отличие varchar от nvarchar заключается в том, что varchar позволяет хранить строки в формате ASCII, где один символ занимает 1 байт, а nvarchar хранит строки в формате Unicode, где каждый символ занимает 2 байта. Тип varchar стоит использовать только в том случае, если вы на 100% уверены, что в данном поле не потребуется хранить Unicode символы. Например, varchar можно использовать для хранения адресов электронной почты, т.к. они обычно содержат только ASCII символы. Строка фиксированной длины char(N) и nchar(N) От строки переменной длины данный тип отличается тем, что если длина строка меньше N символов, то она всегда дополняется справа до длины N пробелами и сохраняется в БД в таком виде, т.е. в базе данных она занимает ровно N символов (где один символ занимает 1 байт для char и 2 байта для типа nchar). На моей практике данный тип очень редко находит применение, а если и используется, то он используется в основном в формате char(1), т.е. когда поле определяется одним символом. Целое число int Данный тип позволяет нам использовать в столбце только целые числа, как положительные, так и отрицательные. Для справки (сейчас это не так актуально для нас) – диапазон чисел который позволяет тип int от -2 147 483 648 до 2 147 483 647. Обычно это основной тип, который используется для задания идентификаторов. Вещественное или действительное число float Если говорить простым языком, то это числа, в которых может присутствовать десятичная точка (запятая). Дата date Если в столбце необходимо хранить только Дату, которая состоит из трех составляющих: Числа, Месяца и Года. Например, 15.02.2014 (15 февраля 2014 года). Данный тип можно использовать для столбца «Дата приема», «Дата рождения» и т.п., т.е

в тех случаях, когда нам важно зафиксировать только дату, или, когда составляющая времени нам не важна и ее можно отбросить или если она не известна. Время time Данный тип можно использовать, если в столбце необходимо хранить только данные о времени, т.е. Часы, Минуты, Секунды и Миллисекунды

Например, 17:38:31.3231603 Например, ежедневное «Время отправления рейса». Дата и время datetime Данный тип позволяет одновременно сохранить и Дату, и Время. Например, 15.02.2014 17:38:31.323 Для примера это может быть дата и время какого-нибудь события. Флаг bit Данный тип удобно применять для хранения значений вида «Да»/«Нет», где «Да» будет сохраняться как 1, а «Нет» будет сохраняться как 0.

  • ID – Табельный номер (Идентификатор сотрудника)
  • Name – ФИО
  • Birthday – Дата рождения
  • Email – E-mail
  • Position – Должность
  • Department – Отдел

Двоичные данные

Oracle поддерживает несколько разновидностей двоичных данных — неструктурированных данных, не интерпретируемых и не обрабатываемых Oracle. К их числу относятся типы , и . Тип используется для хранения неструктурированных двоичных данных в файлах операционной системы вне базы данных. Тип имеет переменную длину, а при операциях с ним Oracle не выполняет преобразование символов при передаче данных. В остальном он аналогичен символьному типу .

Тип данных поддерживается для обеспечения обратной совместимости, но в PL/SQL поддержка данных ограничена. В базе данных Oracle столбецзанимает до 2 Гбайт, но PL/SQL позволяет работать только с первыми 32 760 байтами . Если, например, вы попытаетесь выполнить выборку в переменную PL/SQL из столбца , превышающего лимит в 32 760 байт, произойдет ошибка:  

ORA-06502: PL/SQL: numeric or value error exception.

Для работы с данными, превышающими лимит PL/SQL, потребуется программа OCI; кстати, это веская причина для перевода старого кода с на данные , не имеющие такого ограничения.

Символьные типы данных

Существует два общих вида символьных типов данных. Строки могут представляться однобайтовыми символами или же символами в кодировке Unicode. (В кодировке Unicode для представления одного символа применяется несколько байтов.) Кроме этого, строки могут быть разной длины. В таблице ниже перечислены категории символьных типов данных с их кратким описанием.

Символьные типы данных T-SQL
Тип данных Описание
CHAR

Применяется для представления строк фиксированной длины, состоящих из n однобайтовых символов. Максимальное значение n равно 8000. CHARACTER(n) — альтернативная эквивалентная форма CHAR(n). Если n явно не указано, то его значение полагается равным 1.

VARCHAR

Используется для представления строки однобайтовых символов переменной длины (0 < n < 8 000). В отличие от типа данных CHAR, количество байтов для хранения значений типа данных VARCHAR равно их действительной длине. Этот тип данных имеет два синонима: CHAR VARYING и CHARACTER VARYING.

NCHAR

Используется для хранения строк фиксированной длины, состоящих из символов в кодировке Unicode. Основная разница между типами данных CHAR и NCHAR состоит в том, что для хранения каждого символа строки типа NCHAR требуется 2 байта, а строки типа CHAR — 1 байт. Поэтому строка типа данных NCHAR может содержать самое большее 4000 символов. Тип NCHAR можно использовать для хранения, например, символов русского алфавита, т.к. однобайтовые кодировки не позволяют делать этого.

NVARCHAR

Используется для хранения строк переменной длины, состоящих из символов в кодировке Unicode. Для хранения каждого символа строки типа NVARCHAR требуется 2 байта, поэтому строка типа данных NVARCHAR может содержать самое большее 4000 символов.

Тип данных VARCHAR идентичен типу данных CHAR, за исключением одного различия: если содержимое строки CHAR(n) короче, чем n символов, остаток строки заполняется пробелами. А количество байтов, занимаемых строкой типа VARCHAR, всегда равно количеству символов в ней.

Parameters

numeric‑type

One of the following:

precision

An unsigned integer that specifies the total number of significant digits that the data type stores, where precision is ≤ 1024. If omitted, the depends on numeric type that you specify. If you assign a value that exceeds precision, Vertica returns an error.

If a data type’s precision is ≤ 18, performance is equivalent to an INTEGER data type, regardless of scale. When possible, Vertica recommends using a precision ≤ 18.

scale

An unsigned integer that specifies the maximum number of digits to the right of the decimal point to store. scale must be ≤ precision. If omitted, the depends on numeric type that you specify. If you assign a value with more decimal digits than scale, the scale is rounded to scale digits.

Числовые типы данных

Ниже приведены числовые типы данных в SQL Server (Transact-SQL):

Синтаксис типа данных Максимальный размер Пояснение
BIT Целое число, которое может быть 0, 1 или NULL.
TINYINT От 0 до 255
SMALLINT -32768 до 32767
INT -2,147,483,648 до 2,147,483,647
BIGINT -9,223,372,036,854,775,808 — 9,223,372,036,854,775,807
DECIMAL(m,d) m по умолчанию — 18, если не указано. d по умолчанию равно 0, если не указано. Где m — это суммарное количество цифр, а d — количество цифр после десятичного знака.
DEC(m,d) m по умолчанию — 18, если не указано. d по умолчанию равно 0, если не указано. Где m — это суммарное количество цифр, а d — количество цифр после десятичного знака. Это синоним типа DECIMAL.
NUMERIC(m,d) m по умолчанию — 18, если не указано. d по умолчанию равно 0, если не указано. Где m — это суммарные цифры, а d — количество цифр после десятичного знака. Это синоним типа DECIMAL.
FLOAT(n) Число с плавающей точкой. n по умолчанию — 53, если не указано. Где n — количество бит, которое должно храниться в научной нотации.
REAL Эквивалент FLOAT (24)
SMALLMONEY — 214,748.3648 до 214,748.3647
MONEY -922,337,203,685,477,5808 до 922,337,203,685,477.5807

Тип данных REF CURSOR

Тип данных позволяет объявлять курсорные переменные, которые могут использоваться со статическими и динамическими SQL-командами для улучшения гибкости программного кода. Тип существует в двух формах: сильной и слабой. PL/SQL относится к категории языков со статической типизацией, а слабый тип является одной из немногочисленных конструкций с динамической типизацией.

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

DECLARE
TYPE book_data_t IS REF CURSOR RETURN book%ROWTYPE;
book_curs_var book_data_t;

Далее следуют два слабых объявления , в которых переменная не связывается ни с какой конкретной структурой. Во втором объявлении (строка 4) представлен тип — заранее определенный слабый тип . 

DECLARE
TYPE book_data_t IS REF CURSOR;
book_curs_var book_data_t;
book_curs_var_b SYS_REFCURSOR;

TL;DR версия

  • Удалите ненужные колонки из схемы.
  • Сократите длину колонок до минимума.
  • Избегайте использования NULL значений.
  • Выберите минимально необходимые числовые типы (TINYINT / SMALLINT вместо INT).
  • Используйте FLOAT / DOUBLE вместо DECIMAL для приблизительных чисел.
  • Выберите CHAR для строк приблизительно одинаковой длины.
  • Для остальных строк — выберите VARCHAR.
  • Не используйте TEXT / BLOB для сортировки и индексирования.
  • Используйте ENUM вместо строк из фиксированного набора (например, списка стран).
  • Используйте TIMESTAMP для простановки времени событий (регистрация, отправка сообщения и т.п.).
  • Для остальных дат используйте DATETIME.
  • Прочитайте об устройстве индексов и тюнинге настроек в Mysql.

Numeric Versus Integer and Floating Data Types

Numeric data types are exact data types that store values of a specified precision and scale, expressed with a number of digits before and after a decimal point. This contrasts with the Vertica integer and floating data types:

  • supports ~15 digits, variable exponent, and represents numeric values approximately. It can be less precise than data types.
  • supports ~18 digits, whole numbers only.

The data type is preferred for non-integer constants, because it is always exact. For example:

=> SELECT 1.1 + 2.2 = 3.3; 
?column?
----------
 t
(1 row)

=>  SELECT 1.1::float + 2.2::float = 3.3::float;
 ?column?
----------
 f
(1 row)

С этим читают