Sql

Тип данных decimal sql: decimal и numeric (Transact-SQL) — SQL Server

Типы данных (Transact-SQL) — SQL Server

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

В 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).

Категории типов данных

Типы данных в SQL Server объединены в следующие категории:

Точные числа

Символьные строки в Юникоде

Приблизительные числа

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

Дата и время

Прочие типы данных

Символьные строки

В зависимости от параметров хранения, некоторые типы данных в SQL Server относятся к следующим группам:

  • Типы данных больших значений: varchar(max) и nvarchar(max)

  • Типы данных больших объектов: text, ntext, image, varbinary(max) и xml

    Примечание

    Хранимая процедура sp_help возвращает -1 в качестве значения длины для типов данных большого объема и

    xml.

Точные числа

bigint

numeric

smallint

decimal

smallmoney

tinyint

Приблизительные числа

Дата и время

datetimeoffset

datetime2

smalldatetime

datetime

Символьные строки

varchar

Символьные строки в Юникоде

nvarchar

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

binary

varbinary

Прочие типы данных

курсор

rowversion

hierarchyid

uniqueidentifier

sql_variant

Типы пространственной геометрии

Типы пространственной географии

См. также раздел

CREATE PROCEDURE (Transact-SQL)
Инструкция CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)EXECUTE (Transact-SQL)
Выражения (Transact-SQL)
Функции (Transact-SQL)
LIKE (Transact-SQL)
sp_droptype (Transact-SQL)
sp_help (Transact-SQL)

sp_rename (Transact-SQL)

Типы данных ntext, text и image (Transact-SQL) — SQL Server

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Применимо к:База данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure

Эти типы данных фиксированной и переменной длины предназначены для хранения символьных и двоичных данных в формате Юникод и иных форматах. 31 – 1 (2 147 483 647) байт.

Для работы с данными ntext, text или image можно использовать перечисленные ниже функции и инструкции.

ФункцииОператоры
DATALENGTHREADTEXT
PATINDEXSET TEXTSIZE
SUBSTRINGUPDATETEXT
TEXTPTRWRITETEXT
TEXTVALID

Внимание!

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

См. также раздел

  • Типы данных (Transact-SQL)
  • LIKE (Transact-SQL)
  • SET @local_variable (Transact-SQL)
  • Поддержка параметров сортировки и Юникода

Дальнейшие действия

  • Функции CAST и CONVERT (Transact-SQL)
  • Преобразование типов данных (ядро СУБД)
  • ALTER TABLE (Transact-SQL)

Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S), Decimal256(S)

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

Параметры​

  • P — точность. Допустимый диапазон: [ 1 : 76 ]. Определяет, сколько десятичных цифр может иметь число (включая дробь).
  • S — шкала. Допустимый диапазон: [ 0 : P ]. Определяет, сколько десятичных цифр может иметь дробь. 9(76 — S))

Например, Decimal32(4) может содержать числа от -99999,9999 до 99999,9999 с шагом 0,0001.

Внутреннее представление​

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

Поскольку современные процессоры изначально не поддерживают 128-битные целые числа, эмулируются операции над Decimal128. Из-за этого Decimal128 работает значительно медленнее, чем Decimal32/Decimal64.

Операции и тип результата

Двоичные операции над Decimal приводят к более широкому типу результата (с любым порядком аргументов).

  • Десятичный64(S1) Десятичный32(S2) -> Десятичный64(S)
  • Десятичный128(S1) Десятичный32(S2) -> Десятичный128(S)
  • Dec
  • Decimal64(S2) -> Decimal128(S)
  • Decimal256(S1) Decimal<32|64|128>(S2) -> Decimal256(S)

Правила масштабирования:

  • сложение, вычитание: S = max(S1, S2).
  • умножить: S = S1 + S2.
  • разделить: S = S1.

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

Операции между Decimal и Float32/Float64 не определены. Если они вам нужны, вы можете явно привести один из аргументов, используя встроенные функции toDecimal32, toDecimal64, toDecimal128 или toFloat32, toFloat64. Имейте в виду, что результат потеряет точность, а преобразование типов — операция, требующая значительных вычислительных ресурсов.

Некоторые функции в Decimal возвращают результат как Float64 (например, var или stddev). Промежуточные вычисления могут по-прежнему выполняться в Decimal, что может привести к различным результатам между входными данными Float64 и Decimal с одинаковыми значениями.

Проверки переполнения

Во время вычислений в Decimal может произойти целочисленное переполнение. Лишние цифры в дроби отбрасываются (не округляются). Превышение цифр в целой части приведет к исключению.

 ВЫБРАТЬ toDecimal32(2, 4) AS x, x / 3 
 ┌acредя ────────────────────────┘ 
 SELECT toDecimal32(4.2, 8) AS x, x * x 
9008: DB:Exception находится за пределами.
 SELECT toDecimal32(4.2, 8) AS x, 6 * x 
 DB::Exception: Десятичное математическое переполнение. 

Проверки переполнения приводят к замедлению работы. Если известно, что переполнения невозможны, имеет смысл отключить проверку с помощью decimal_check_overflow настройка. Когда проверки отключены и происходит переполнение, результат будет неверным:

 SET decimal_check_overflow = 0; 
SELECT toDecimal32(4. 2, 8) AS x, 6 * x
 ┌──────────x─┬─multiply(6, toDecimal32(4.2, 8))─0 -0 0 

─0┐ 17.74967296 │
└ackinding ─┘

Проверки на переполнение происходят не только при арифметических операциях, но и при сравнении значений:

 SELECT toDecimal32(1, 8) < 100 
 DB::Exception: сравнение невозможно. 

См. также

  • isDecimalOverflow
  • countDigits

Тип данных DECIMAL

Тип данных DECIMAL

 

ДЕСЯТИЧНЫЙ тип данных

Тип данных DECIMAL представляет собой десятичное число с точностью , общим числом цифр и шкала знаков после запятой.

Синтаксис
  ДЕСЯТИЧНОЕ  [  (   точность  [ ,  масштаб  ]  )  ] 
Параметры
  • точность   Целочисленное выражение от 1 до 127 включительно, указывающее количество цифр в выражении. Настройка по умолчанию 30.

  • масштаб   Целочисленное выражение от 0 до 127 включительно, указывающее количество цифр после запятой. Масштаб значение всегда должно быть меньше или равно значению точности. По умолчанию установлено значение 6.

    Значения по умолчанию можно изменить, задав параметры базы данных. Дополнительные сведения см. в разделе параметр точности [база данных] и параметр масштаба [база данных].

Примечания

Тип данных DECIMAL является точным числовым типом данных; его точность сохраняется до младшего значащего разряда после арифметики операции.

Память, необходимая для десятичного числа, может быть оценена как

 2 + int( (до + 1)/2 ) + int( (после + 1)/2 ) 

Функция int принимает целую часть своего аргумента, а до и после — количество значащих цифр перед и после десятичной точки.

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

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