什么是存储高度的最佳数据类型?

时间:2014-11-07 18:39:19

标签: sql sql-server types

非常直截了当的问题,我想用十进制在1列中存储英尺和英寸,但我不希望它像浮动类型一样被截断。

7 个答案:

答案 0 :(得分:4)

以MKS(公制)存储您的所有数据。在呈现和存储时将数据转换为国际标准。并将其存储为十进制类型。

因此,如果您收集数据的工具是6'2“格式,请将其转换为cm并保存在数据表中。然后将其反转以显示。

以十进制厘米的标准格式保存。找到具有相同高度范围的人更容易,就像Ft和In在单独的列中一样,范围真的很难。

答案 1 :(得分:2)

仍然在缅甸,利比里亚使用的帝国单位制度,遗憾的是北美的一个国家不是非常符合算术的。有no native data-type来处理奇怪的base12 / base3 / base1860数学。

您应该使用更广泛使用的公制系统,并使用代表米的FLOAT或DECIMAL值。

但是,如果你真的想继续使用英制系统,你应该以英寸为单位存储值,并在GUI级别上将对话设置为英尺+英寸。

答案 2 :(得分: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;

我会选择英寸,因为你可以通过除法得到一些舍入误差,但不能用乘法。

答案 3 :(得分:0)

使用DECIMAL数据类型

它允许您指定满足特定需求所需的精度,而不会像FLOAT那样截断

答案 4 :(得分:0)

NUMERIC()DECIMAL()适用于单列回答,但您需要决定是否存储英尺或英寸。这些字段使用精确的数学和准确的存储。

如果必须存储英尺和英寸,则需要定义自己的数据类型(相当复杂)或使用两个NUMERIC()DECIMAL()字段。

在测量人类大小的东西时,并不是因为FLOAT而导致脚或英寸的精度问题。你会被头发弄掉。字面上。

答案 5 :(得分: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

答案 6 :(得分:0)

我建议store the data in single unit,either inches or in cm.

理想情况下,为用户提供以任何格式输入的选项。转换并显示所有可能单位的用户信息,如英尺和英寸和厘米。