Самый эффективный способ хранить номер 11.111 в SQL Server - PullRequest
1 голос
/ 16 ноября 2009

Какой тип данных наиболее эффективен для хранения числа, например 11.111.

Числа будут иметь до 2 цифр перед точкой и до трех после.

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

Любая помощь высоко ценится.

спасибо

Ответы [ 5 ]

5 голосов
/ 16 ноября 2009

Если вам нужно точное представление, тип данных smallmoney использует 4 байта.

Это эквивалентно использованию int (4 байта) и выполнению умножения / деления для обработки дробных цифр.

2 голосов
/ 16 ноября 2009

Вы должны использовать тип данных DECIMAL. Он хранит точные числа с плавающей точкой

DECLARE @d decimal(5, 3)
SET @d=12.671
SELECT @d, DATALENGTH(@d)

Как указывал @Mitch, это будет 5 байт. Вы платите дополнительный байт за более простые вычисления со значением.

2 голосов
/ 16 ноября 2009

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

1 голос
/ 16 ноября 2009

Bigint - это целочисленный тип данных, так что да, это не сработает без предварительной обработки. Вам нужно хранить значения точно или только приблизительно? Бинарные типы с плавающей точкой (float, real) эффективны и компактны, но не представляют точно много десятичных значений, поэтому сравнения не всегда дают то, что вы ожидаете, и ошибки накапливаются. decimal хорошая ставка. Десятичная дробь с точностью 5 и шкалой 3 (отвечающая вашим требованиям) занимает пять байтов.

См. Документацию по десятичному типу данных здесь и типам данных в целом здесь .

0 голосов
/ 16 ноября 2009

Используйте десятичный тип данных, чтобы установить точную точность:

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