2014-11-07 2 views
1

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

+10

Почему бы вам не сохранить его в дюймах и представить его в виде ног и дюймов в пользовательском интерфейсе? –

+2

десятичная цифра для нумерации базы-10. дюймы/футы - это что-то BUT base-10. –

+1

@MarcB Действительно, вы не можете конвертировать дюймы в футы и дюймы? – Paparazzi

ответ

3

Храните все свои данные в MKS (метрические). При представлении и хранении данные преобразуются в международный стандарт. и сохраните его в десятичном типе.

Таким образом, если ваш инструмент для сбора данных в 6'2" формат конвертировать его в см и сохранить в таблице данных. Затем изменить это на дисплее.

Сохраняя в стандартном формате десятичного см. Вывод люди с таким же диапазоном высоты легче, где, как если бы Ft и In находились в отдельных столбцах, диапазоны действительно тяжелые.

+0

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

+0

Правильно, это было скорее вопросом стандартизации данных (MKS), чтобы иметь лучшую отправную точку, которая позволит регионализовать данные. Например, мой рост 6'2 "может быть сохранен как 6.16667 фута Только английские системы мертвы. –

+0

В США регионализация - футы/дюймы. Я google MKS и ничего не нахожу – Paparazzi

0

Использование DECIMAL Тип данных

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

0

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

Если вы должны хранить ноги и дюймы, вам нужно либо определить свой собственный тип данных (что довольно сложно), либо использовать два поляили DECIMAL().

Не то, чтобы вы когда-либо сталкивались с проблемами точности с ногами или дюймами с FLOAT при измерении чего-то размером с человека. У тебя будет волосы. Буквально.

2

Имперская единица системы все еще используется в Мьянме, Либерия, и что одна страна в Северной Америке, к сожалению, не очень no native data-type для обработки странной базы 12/base3/base1860 для этого.

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

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

+3

Соединенные Штаты рассмотрят возможность перехода к метрике, когда Европа выбирает язык для выступления. –

+0

Соединенные Штаты рассмотрят возможность перехода к метрике, когда он устает от участия в эксклюзивном клубе с Ливией и Бирмой. Я бы проголосовал за этот глупый комментарий, если мог. – duffymo

1

Decimal позволяет хранить точную точность.

Вопрос в том, хотите ли вы хранить его в футах или дюймах.

Если дюймов затем: ноги * 12 + дюймов

Если ступни: ноги + (дюймы/12)

Если дюймов конверсия назад

declare @inches dec(8,4) 
declare @indesinfoot as dec(8,4); 
set @indesinfoot = 12; 
set @inches = (12*@indesinfoot) + 6.25; 
print @inches; 
SELECT cast(@inches/@indesinfoot as Int) as feet, 
     inches % @indesinfoot AS inches; 

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

0

Пример процедуры преобразования старой английской системы в метрику. Нет проверки ошибок, но это даст вам представление о том, как преобразовать данные, введенные в данные для хранения.

CREATE PROCEDURE usp_ConvertHeight 
    @Input varchar(10) 
AS 
BEGIN 
DECLARE 
    @FT AS DECIMAL(18,10) = 0, 
    @IN AS DECIMAL(18,10) = 0, 
    @CM AS DECIMAL(18,10) 

SELECT @FT = CAST(left(@Input,CHARINDEX('''',@Input,1) - 1) AS DECIMAL(18,10)); 
SELECT @IN = CAST(REPLACE(SUBSTRING(@Input,CHARINDEX('''',@Input,1) + 1,10),'"','')AS DECIMAL(18,10)); 
SET @CM = 2.54 * ((12 * @FT) + @IN); 
    SELECT @CM 
END 
0

Я предлагаю store the data in single unit,either inches or in cm.

В идеале дать возможность пользователю ввести его в любом формате. Преобразуйте и покажите информацию о пользователе во всех возможных единицах, например, в футах и ​​дюймах и см.

Смежные вопросы