7.1< 7.10 - 订购号码

时间:2009-11-16 04:56:17

标签: .net sql-server

有没有办法在db中存储数字,以便7.1小于7.10,即保持2分? 目前这些数字存储为浮点数 - 我是否需要更改为小额,小数或其他什么? 任何帮助提示赞赏。

目前.Net对象使用Double和sql server列是浮点数。

7 个答案:

答案 0 :(得分:3)

很可能你必须找到一种不同的方式来存储和比较这两个数字,因为7.1和7.10在谈论数字时是相等的。您可能必须使用varchar字段,然后创建一个比较这两个值的函数。

我可能会有两个字段,主要字符和次要字段,然后按主要编号排序,然后按次要编号。

答案 1 :(得分:2)

你想要7.2还小于7.10吗?与某些版本控制方案一样?

如果是,请将版本号存储为两个整数字段。要进行比较,您可以单独比较每个或使用(左* 1000 +右)或类似。

答案 2 :(得分:1)

将它存储为字符串,这是这两个数字不同的唯一方式。

答案 3 :(得分:0)

如果选择数字数据类型,则7.1和7.10之间根本没有区别。

在这种情况下我要做的是将列拆分成两个整数和小数部分。

因此7.1将存储为7和1,7.10将存储为7和10。

如果它是一个简单的两部分(主要/次要)数字,那就足够了,我想

您的查询将变为:

select major|'.'|minor, other_fields
from tbl
order by major, minor.

对于多部分编号(如章节标题,3.1.4.5.9等),我仍然会将其拆分,但可能会使用单独的表来保存组件。

答案 4 :(得分:0)

我会使用两个整数列。第一个包含数字的左侧(7.1 => 7),另一个包含右侧(7.1 => 1)。每当我通过将列值转换为字符串并附加它们来查询数据库时,我会得到7.1值。然后,您可以使用各个列值进行排序。

这个想法是你会有这样的查询:(抱歉,我不知道如何在查询中转换类型):

Select string(col1) + string(col2)
from table
orderby col1, col2

答案 5 :(得分:0)

您可以将这些值用作查找存储其序号位置的另一个表。

CREATE TABLE Versions (
 version VARCHAR(10) PRIMARY KEY,
 ordinal INT NOT NULL
);

INSERT INTO Versions ('7.1', 1);
INSERT INTO Versions ('7.10', 2);

使用外键使表格引用Versions

CREATE TABLE MyTable (
 . . .
 version VARCHAR(10) NOT NULL,
 FOREIGN KEY (version) REFERENCES Versions(version)
);

现在您可以加入此表并按顺序排序:

SELECT m.*
FROM MyTable m
JOIN Versions v USING (version)
ORDER BY v.ordinal;

为了获得更大的灵活性,请将ordinal设为FLOAT,这样您就可以在现有条目之间添加新条目,而无需重新编号。

答案 6 :(得分:0)

您没有说明您实际使用这些数字的是什么,但如果是版本控制,您应该在.NET代码中使用Version class

通过这种方式,您可以获得内置类(比较等)的所有好处,并且当您需要将它们存储在数据库中时,请调用Version.ToString()以将结果作为字符串获取。然后可以将其轻松存储为varchar字段。

要从数据库中获取以前存储的版本,请检索varchar字段,然后将其作为字符串参数传递给Version类构造函数。

如果您愿意,还可以使用Version.Major,Version.Minor属性在单独的整数数据库字段中存储和检索值。

相关问题