Ms sql numeric: decimal и numeric (Transact-SQL) — SQL Server

Понимание типа данных SQL Decimal

Цель этой статьи — познакомить вас с типом данных SQL Decimal и его использованием на различных примерах. Мы также увидим, как мы можем использовать этот тип данных в SQL Server, чтобы упростить работу разработчика SQL.

Введение

Организации ежедневно имеют дело с десятичными знаками, и эти десятичные значения можно увидеть повсюду в разных секторах, будь то банки, медицинская промышленность, биометрия, заправочные станции, финансовые отчеты, спорт и так далее. Использование целых чисел (путем округления десятичных чисел) определенно упрощает работу, но часто приводит к неточным результатам, особенно когда мы имеем дело с большим количеством значений и важных данных. В таких сценариях идеально использовать тип данных Sql Decimal в SQL Server для получения правильных результатов с идеальной точностью.

Разработчикам SQL становится очень важно выбирать правильные типы данных в структуре таблицы при проектировании и моделировании баз данных SQL. Давайте двигаться вперед и исследовать тип данных Decimal в SQL Server.

Необходимое условие

Тип данных SQL Decimal используется в SQL Server с незапамятных времен. Вы можете использовать любую установленную версию SQL Server (начиная с 2000 или выше), чтобы понять этот тип данных. В этой статье мы будем использовать SQL Server 2017 для демонстрационных целей. Если в вашей системе не установлена ​​какая-либо версия и вы хотите потренироваться с версией 2017 года, загрузите ее отсюда.

Основной синтаксис типа данных Decimal в SQL Server

Давайте сначала рассмотрим базовый синтаксис типа данных SQL Decimal. Обозначается следующим образом:

  • десятичный [(p [s])]

Где,

  • p означает Точность, общее количество цифр в значении, т.е. по обе стороны от десятичной точки
  • s означает Масштаб, количество знаков после запятой

Значение по умолчанию p равно 18, а s равно 0, и для обоих этих значений минимальное значение равно 1, а максимальное — 38.

Короче говоря, определяя параметры в типе данных SQL Decimal, мы оцениваем, сколько цифр будет иметь столбец или переменная, а также количество цифр справа от десятичной точки.

Например, десятичное число (4,2) указывает, что число будет иметь 2 цифры до десятичной точки и 2 цифры после запятой, что-то вроде этого должно быть числовым значением — ##.##.

Здесь важно отметить одну важную вещь: параметр s (Масштаб) может быть указан только в том случае, если указан параметр p (Точность). Масштаб всегда должен быть меньше или равен точности.

Определение десятичного типа данных SQL

Давайте поработаем с очень популярной математической константой — π, также известной как Pi, которая имеет значение, равное 3,14159 (22/7 в дробях). Скопируйте и вставьте приведенный ниже запрос в новое окно запроса и выполните его.

DECLARE @PiWithNoDecimal DECIMAL(6,0) = 3,14159

DECLARE @Piupto5Decimal DECIMAL(6,5) = 3,14159

DECLARE @Piupto1Decimal DECIMAL(3,1) = 3. 14159

ВЫБЕРИТЕ @PiWithNoDecimal КАК PiWithNoDecimal, @Piupto5Decimal КАК Piupto5Decimal, @Piupto1Decimal AS Piupto1Decimal

Приведенный выше набор результатов показывает, как SQL Server обрабатывает каждое сочетание точности и масштаба как отдельный тип данных. Как и здесь, десятичный (6, 0) ведет себя иначе, чем десятичный (6,5) и десятичный (3,1) типы данных и рассматриваются как три разных типа. Таким образом, мы можем настроить параметры в десятичном типе SQL для достижения желаемых результатов.

Теперь, когда мы знаем, как создать этот тип данных Decimal в SQL Server, давайте рассмотрим его на многочисленных примерах.

Использование десятичных знаков SQL в таблицах

Давайте быстро создадим новую таблицу под названием «Пациенты», в которой для высоты и веса столбцов используется десятичный тип данных. Мы вставим несколько строк, используя предложение INSERT, как показано ниже, для демонстрационных целей.

1

2

3

4

5

6

7

8

9

10

11

CREATE TABLE dbo.Patients

( Имя varchar(10),

  Пол varchar(2),

  Десятичный рост (3,2),

  Десятичный вес (5,2) 900 03

)

ВСТАВИТЬ В PATIENTS VALUES(‘John’,’M’,6.1,80.4)

ВСТАВИТЬ В PATIENTS VALUES(‘Bred’,’M’,5.8,73.7)

ВСТАВИТЬ В PATIENTS VALUES(‘Leslie’,’F’,5.3 ,66,9)

ВСТАВИТЬ В ЗНАЧЕНИЯ ПАЦИЕНТОВ(‘Rebecca’,’F’,5.7,50.2)

ВСТАВИТЬ В ЗНАЧЕНИЯ ПАЦИЕНТОВ(‘Shermas’,’M’,6.5,190.6)

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

ВЫБЕРИТЕ * ИЗ dbo.PATIENTS

Давайте выясним, что произойдет, если мы попытаемся вставить значения, которые превышают указанные значения точности или масштаба, при определении столбцов высоты и веса. Для этой демонстрации мы вставим в эту таблицу еще 2 строки (показаны ниже).

  1. ВСТАВИТЬ В ЗНАЧЕНИЯ ПАЦИЕНТОВ («Самое большое», «М», «10,9», 88,5)

  2. ВСТАВИТЬ В ЗНАЧЕНИЯ ПАЦИЕНТОВ («Халк», «М», «9,9», 1000,45)

Он сталкивается с приведенной ниже ошибкой, говорящей об ошибке арифметического переполнения, и SQL Server завершает выполнение операторов.

Давайте перейдем к корню этой проблемы:

  • Высота Десятичный (3, 2) означает, что значение может состоять из 3 цифр в целом и 2 цифр справа от десятичной точки. В первой строке кода выше значение 10,9(рассматривается как 10,90 = 4 цифры в целом) превышает указанный диапазон (3, 2) и вызывает переполнение
  • Десятичный вес (5,2) означает, что общее количество цифр не может превышать 5, и 2 цифры могут быть размещены справа от десятичной дроби. Однако значение 1000,45 во второй строке вышеприведенного кода превышает указанный диапазон (5, 2), поскольку это означает всего 6 цифр и выдает ошибку переполнения.
  • Краткое примечание . Если вы заметили, что в приведенном выше сообщении об ошибке вместо десятичного типа данных указан «числовой тип данных», причина в том, что десятичный и числовой типы данных точно совпадают, оба типы данных с фиксированной точностью и могут использоваться взаимозаменяемо

Устранение ошибки

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

ИЗМЕНИТЬ ТАБЛИЦУ dbo.Пациенты ИЗМЕНИТЬ СТОЛБЦ Десятичный рост (4,2)

ИЗМЕНИТЬ ТАБЛИЦУ dbo.Пациенты ИЗМЕНИТЬ СТОЛБЦ Вес десятичный (6,2)

После изменения выполните запросы на вставку, чтобы вставить эти строки в таблицу.

Мы видим, что строки добавляются в таблицу.

Рекомендации по хранению данных с десятичным типом данных в SQL Server

Тип данных SQL Decimal требует следующих байтов хранения для указанной точности, как указано ниже Microsoft:

Точность

Хранилище (байт)

1 – 9

5

10 – 19

9

20 – 28

13

29 – 38

17

Потребление пространства для типа данных SQL Decimal зависит от определения столбца, а не от размера присваиваемого ему значения. Например, Десятичное число (12, 4) со значением 888,888 занимает 9байт на диске, а десятичное (22, 2) значение 9999,99 потребляет 13 байт на диске. Вот почему этот тип данных относится к столбцам фиксированной длины.

Как разработчик SQL, я всегда стараюсь использовать тип данных SQL Decimal как десятичный (9, 2), который занимает наименьшее количество памяти, 5 байт на диске и обеспечивает лучшую производительность.

Заключение

Я надеюсь, что в этой статье представлен понятный подход к использованию типа данных SQL Decimal. Всегда следите за тем, чтобы точность указанной десятичной или числовой переменной была достаточной для размещения присвоенных ей значений. Кроме того, мы наблюдали, как выбор правильного типа данных помогает разработчикам SQL экономить место на диске.

В случае возникновения каких-либо вопросов, пожалуйста, не стесняйтесь задавать их в разделе комментариев ниже.

Чтобы продолжить знакомство с SQL Server и используемыми в нем типами данных, я бы рекомендовал пройти по приведенным ниже ссылкам.

  • Пространственные типы данных SQL в SQL Server
  • Методы преобразования типов данных SQL Server и сравнение производительности
  • Общие сведения о типе данных GUID в SQL Server
  • Пошаговое руководство по внутреннему соединению SQL
  • Автор
  • Последние сообщения

Гаури Махаджан

Гаури является специалистом по SQL Server и имеет более чем 6-летний опыт работы с глобальными многонациональными консалтинговыми и технологическими организациями. Она очень увлечена работой над темами SQL Server, такими как база данных SQL Azure, службы отчетов SQL Server, R, Python, Power BI, ядро ​​базы данных и т. д. Она имеет многолетний опыт работы с технической документацией и увлекается разработкой технологий.

У нее большой опыт в разработке решений для обработки данных и аналитики, а также в обеспечении их стабильности, надежности и производительности. Она также сертифицирована по SQL Server и прошла такие сертификаты, как 70-463: Реализация хранилищ данных с Microsoft SQL Server.

Просмотреть все сообщения Гаури Махаджана

Последние сообщения Гаури Махаджана (посмотреть все)

Числовой тип данных SQL — темы масштабирования

Обзор

Числовой тип данных в SQL является одним из наиболее широко используемых типов данных для хранения числовые значения. Числа в SQL могут быть точными ( NUMERIC, DECIMAL, INTEGER, BIGINT и SMALL INT ) или приблизительный ( DOUBLE PRECISION , FLOAT и REAL ). Целочисленный тип данных используется для хранения целых чисел (числа без десятичной точки или просто недесятичные числа). Целочисленный тип данных состоит из SMALLINT, INTEGER, TINYINT и BIGINT . Тип данных float используется для хранения приблизительных числовых значений.

Область применения

В этой статье рассматриваются следующие темы:

  • Числовой тип данных SQL, ошибки числового типа.
  • Целочисленные типы данных, ошибки целочисленного типа.
  • Типы данных с плавающей запятой.
  • Преобразование десятичных и числовых данных.
  • Арифметические операции над числовыми данными.

Каждая из тем четко объяснена с диаграммами и примерами, где это необходимо.

Тип числовых данных SQL

Прежде чем изучать числовые типы данных в SQL, давайте сначала кратко узнаем о SQL и системах управления базами данных.
SQL или язык структурированных запросов используется для управления и взаимодействия с данными, хранящимися в виде таблиц в базе данных. Прежде чем мы начнем манипулировать данными, нам также нужно сначала вставить данные в таблицы. SQL-запрос (сокращенно запрос) используется для извлечения записей из таблиц базы данных.

MySQL — это широко известная СУБД, которая поддерживает широкий спектр типов данных, таких как char, varchar, binary, text, boolean, bit, integer, float, date и т. д. Мы можем использовать эти типы данных для определения данных наших строк и столбцов. Мы можем разделить эти типы данных на три основные категории: строковые, числовые и дата и время .

Числовой тип данных в SQL является одним из наиболее широко используемых типов данных для хранения числовых значений. Ниже приведен список типов данных, включенных в числовой тип данных в SQL:

  • INTEGER или INT
  • .

  • МАЛЕНЬКИЙ ВНУТРЕННИЙ
  • ДЕСЯТИЧНАЯ или ДЕСЯТИЧНАЯ или ФИКСИРОВАННАЯ
  • ЦИФРОВОЙ
  • ПОПЛАВОК
  • НАСТОЯЩИЙ
  • ДВОЙНОЙ
  • ТОЧНОСТЬ

Примечание:
В MySQL DOUBLE является синонимом DOUBLE PRECISION. REAL также является синонимом ДВОЙНОЙ ТОЧНОСТИ.

Давайте узнаем о синтаксисе, вариантах использования, примерах и ошибках, связанных с числовым типом данных в SQL.

Числа в SQL могут быть либо точными числами (например, NUMERIC, DECIMAL, INTEGER, BIGINT и SMALL INT ) или приблизительные числа (например, DOUBLE PRECISION, FLOAT и REAL ).
В точном числовом типе точность и масштаб сохраняются.

Например, мы можем исправить значащие цифры и точность для числового типа данных. С другой стороны, в приближенных числовых типах точность должна сохраняться, а масштаб — нет (он может быть плавающим). Обратитесь к разделу о плавающих и числовых типах данных для лучшего понимания. 9{38}-1)(1038-1). Основание или основание точной цифры может быть десятичным (по основанию 10) или двоичным (по основанию 2). Таким образом, число, хранящееся в указанном столбце, может быть с основанием 2 или с основанием 10.

Масштаб или s также является целочисленным значением (s должно быть значением из 0 top, и его значение по умолчанию равно 0 ), которое используется для определения максимального количества десятичных знаков, разрешенных справа или слева от десятичной точки. Если число отрицательное, учитываются левые десятичные разряды. В противном случае учитываются правильные десятичные разряды.

Давайте рассмотрим пример базы данных компании, чтобы лучше понять синтаксис. Предположим, мы хотим создать таблицу сотрудников с тремя столбцами, а именно: имя учетной записи, номер учетной записи и зарплата . Столбец оклада представляет собой числовой тип данных со шкалой 2 (две цифры справа от запятой) и точностью 8 (т. е. оклад может быть восьмизначным числом).

Предположим, мы ввели данные с именем Сушант, номер счета 25 , а зарплата 51000 . База данных будет выглядеть так:

Обратитесь к изображению ниже, чтобы увидеть, какие числа разрешены в столбце зарплаты.

Как правило, числовые типы данных в SQL имеют дополнительную опцию UNSIGNED и ZEROFILL. Если мы добавим параметр UNSIGNED в столбец, MySQL запретит отрицательные значения для этого столбца. С другой стороны, если мы добавим параметр ZEROFILL к столбцу, MySQL автоматически добавит атрибут UNSIGNED к столбцу.

Ошибки числового типа

Могут возникнуть некоторые ошибки в числовом столбце, если мы попытаемся пересечь предел точности. Предположим, что вставленные данные слишком велики в соответствии с пределом точности, генерируется ошибка. Ошибка может выглядеть следующим образом: ОШИБКА 1118 (42000): слишком большой размер строки.

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

Ошибка вывода. Теперь давайте вставим данные в точный предел.

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

номер_счета имя_счета зарплата
1 Сушант 123456. 33

Примечание:
В базе данных хранятся только две цифры после запятой, поскольку шкала была установлена ​​на 2.

Целочисленные типы данных

Целочисленный тип данных используется для хранения целых чисел (числа без десятичной точки или просто недесятичные числа). ). Числа могут быть отрицательными. Целочисленный тип данных состоит из SMALLINT, INTEGER, TINYINT и BIGINT.

Синтаксис:

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

Ошибки целочисленного типа

Целочисленный тип данных округляет десятичное число (например, 123,5 будет округлено до 124 ). Эта функция округления целочисленного типа данных может в какой-то момент вызвать несогласованность. Если нам нужна точная точность, мы можем использовать тип данных float (подробности см. в следующем разделе).

Возьмем в качестве примера ту же таблицу студентов и попробуем вставить десятичные значения в столбец взносов.

Стол для учащихся

student_id student_name взносы
1 Saumya 124

Типы данных с плавающей запятой

Тип данных с плавающей запятой используется для хранения приблизительных числовых значений, как и целое число Используются типы данных. Плавающий тип данных состоит из двух частей, а именно значимого значения ( M ) и значения экспоненты ( D 9).0181).
Значимое значение — это числовое значение со знаком, которое представляет собой максимальное количество цифр, то есть точность.

Значение степени также является положительным значением, которое используется для определения количества цифр справа от десятичной точки. Например: если мы вставим 878.00009 в столбец FLOAT(7,4) , приблизительный результат будет 878.0001 .

Преобразование десятичных и числовых данных

Константа с десятичной точкой в ​​операторах SQL автоматически преобразуется в числовое значение данных. Преобразование десятичного или числового значения в число с плавающей запятой или число с плавающей запятой может привести к потере точности. С другой стороны, преобразование числа с плавающей запятой в десятичное или числовое значение может привести к потере данных (также известной как переполнение данных).

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

Пример:
Давайте возьмем пример базы данных колледжа, чтобы лучше понять синтаксис. Предположим, мы хотим создать таблицу учеников с тремя столбцами: студенческий билет, плата за автобус и взносы . Столбец взносов представляет собой десятичный столбец, а столбец платы за проезд — числовой тип данных.

Давайте теперь вставим некоторые значения в таблицу учеников.

Давайте теперь выберем детали таблицы учеников и посмотрим, как работает автоматическое преобразование.

Вывод:

student_id bus_fee взносы
1 111.00 9 0045

12345.12300
2 145.00 12345.60000

Теперь, как мы видим, преобразование состоялось. Число 12345,123 было преобразовано в 12345,12300 , поскольку мы установили точность и масштаб на 5 .

Арифметические операции над числовыми данными

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

Арифметические операторы могут выполнять все арифметические операции, такие как сложение, вычитание, умножение, деление и по модулю над операндами оператора.

Операторы сравнения SQL используются с предложением WHERE, когда нам нужно указать некоторые условия, касающиеся операции.

Ниже приведен список арифметических операторов, присутствующих в SQL:

Оператор Описание
+ Оператор Addition используется для выполнения дополнительных операций над операндами.
Оператор Subtraction выполняет операции вычитания над операндами (чтобы получить разницу между операндами).
* Оператор Умножение выполняет операции умножения над операндами.
/ Раздел 9Оператор 0181 выполняет операции деления над операндами.
% Оператор модуля используется для выполнения операции модуля над операндами (для получения остатка при делении одного операнда на другой).

Давайте рассмотрим пример, чтобы лучше понять арифметические операторы.

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

Обзор таблицы сотрудников:

ID Зарплата Премия Налоги
1 86000 9200 5000
2 85000 9100 5500 9004 5
3 73000 9800 4500

Теперь выполним некоторые арифметические операции с помощью арифметических операторов.

Вывод:

В этом запросе мы добавили сумму оклада и бонуса для расчета общей зарплаты из приведенной выше таблицы.

Точно так же мы можем использовать различные другие арифметические операторы.
Если мы хотим получать необлагаемую налогом зарплату.

Вывод:

Заключение

  • Числовой тип данных в SQL является одним из наиболее широко используемых типов данных для хранения числовых значений.
  • Числа в SQL могут быть точными (NUMERIC, DECIMAL, INTEGER, BIGINT и SMALL INT) или приблизительными (DOUBLE PRECISION, FLOAT и REAL).
  • Точный числовой тип, точность и масштаб сохраняются. С другой стороны, в приблизительных числовых типах точность должна сохраняться, а масштаб — нет (он может быть плавающим).
  • Целочисленный тип данных используется для хранения целых чисел (числа без десятичной точки или просто недесятичные числа). Целочисленный тип данных состоит из SMALLINT, INTEGER, TINYINT и BIGINT.