Определения полей базы данных - PullRequest
2 голосов
/ 15 июля 2010

Мне нужно выполнить миграцию данных из базы данных, и я не слишком знаком с базами данных, поэтому я хотел бы получить некоторые пояснения.У меня есть некоторая документация, которая может относиться к базе данных Oracle или SQL, и у нее есть столбец, определенный как NUMBER (10,5).Я хотел бы знать, что это значит.Я думаю, что это означает, что число имеет 10 цифр с 5 после десятичной точки, но я хотел бы уточнить.Также это будет отличаться для SQL или Oracle?

Ответы [ 3 ]

4 голосов
/ 15 июля 2010

Первое число - точность, второе число - шкала. Эквивалент в SQL Server может быть как десятичный / числовой, и вы можете определить его так:

DECLARE @MyDec decimal(18,2)

18 - это максимальное общее количество десятичных цифр, которое может быть сохранено (то есть общее количество цифр, например, 123.45, точность здесь равна 5, а масштаб равен 2) . 2 - это шкала, и она определяет максимальное количество цифр, хранящихся справа от десятичной точки.

См. эту статью

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

p (точность)

Указывает максимальное общее количество десятичные цифры, которые могут быть сохранены, как слева, так и справа от десятичная точка. Точность должна быть значением от 1 до максимума точность. Максимальная точность 38. Точность по умолчанию - 18.

с (масштаб)

Определяет максимальное количество десятичные цифры, которые могут быть сохранены в право десятичной запятой. Масштаб должно быть значение от 0 до p. Масштаб можно указать, только если точность указана. По умолчанию шкала 0; следовательно, 0 <= s <= p. Максимальные размеры хранилища варьируются в зависимости от точность. </p>

Наконец, стоит упомянуть, что в oracle вы можете определить масштаб, превышающий точность, например, Number (3, 10) действует в oracle. SQL Server, с другой стороны, требует, чтобы точность> = scale. Таким образом, если вы определили Number (3,10) в oracle, он будет отображаться в sql как Number (10,10).

1 голос
/ 15 июля 2010

Определение столбца в Oracle как NUMBER (10,5) означает, что значение столбца может иметь десятичную дробь с точностью до пяти точек и общей длиной до десяти цифр.Если вы вставите значение в столбец, для которого не определены десятичные разряды, максимальный столбец будет поддерживать 10 цифр.Например, эти значения будут поддерживаться столбцом, определенным как NUMBER (10,5):

1234567890
 12345.67890

Это затруднило проверку.

MySQL и SQL Server не поддерживаютТип данных NUMBER - для поддержки десятичных чисел вы используете DECIMAL (или FLOAT?).Я не смотрел на PostgreSQL, но думаю, что он похож на Oracle.

1 голос
/ 15 июля 2010

В Oracle для столбца, определенного как NUMBER (4,5), требуется ноль для первой цифры после десятичной точки и округление всех значений после пятой цифры после десятичной точки.

Из Документация Oracle

NUMBER(p,s)

где: p - точность или общее количество цифр.Oracle гарантирует переносимость чисел с точностью от 1 до 38. s - это масштаб или число цифр справа от десятичной точки.Шкала может варьироваться от -84 до 127.

Вот несколько примеров:

Фактические данные .000127, сохраненные в NUMBER(4,5), становятся .00013

Фактические данные 7456123.89, хранящиеся в NUMBER(7,-2), становятся 7456100

Отредактировано

Джон упоминает кое-что примечательное:scale> precision, поэтому SQL отобразит это так, что если s> p, то p становится s.То есть NUMBER (3, 4) в oracle становится NUMERIC (4,4) в SQL.

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