2

可以说我有一个不同价格的长度范围

Length      Price
0 - 10        18
11 - 15       20
16 - 20       30
21 - 40       45
41 - infinity 60

我应该如何将这些信息存储在数据库中,当我输入长度时如何检索信息10.625?如何获得长度为 的商品的价格10.625


我不确定我是否已经解决了这个问题

priceData.Length_End = Math.Ceiling(priceData.Length);

        string selectStatement = 
            "SELECT Price PriceList2 " +
            "WHERE @Length_End >= Length_Start AND @Length <= Length_End";

然后我得到第一个读者的价值

SqlDataReader reader = selectCommand.ExecuteReader();
while (reader.Read())
{
   price = decimal.Parse(reader["Price_Per_Ton"].ToString());
   break;
}
reader.Close();

如果我错了,请纠正我。感谢所有的回复!

4

2 回答 2

2

好吧,我相信你只需要存储,当你想在查询中获取列时Length就可以使用。像;BETWEENPrice

Select Price
From YourTable
Where Length BETWEEN 11 AND 15

这里是SQL Fiddle Demo

Length但是只有当你知道每个范围的最大值和最小值时,这种结构才可以。如果您还想将它们存储在数据库中,您应该将两个不同的列分开Length。像;

Max_Length | Min_Length | Price
0          | 10         | 18
11         | 15         | 20 
16         | 20         | 30
21         | 40         | 45
41         |            | 60

Select Price
From YourTable
Where Min_Length < 10.625 AND Max_Length > 10.625
于 2013-04-17T05:34:16.727 回答
2

您可以将结构更改为:

len_start    len_end      price
0            10           18
11           15           20
16           20           30
21           40           45
41           infinity     60

并运行如下查询:

declare @len decimal
set @len= 10.615

select price from table
Where len_start <= @len and @len < len_end

如果您打算使用 NULL 作为无穷大,请运行以下查询:

select price from table
Where (len_end is not null AND len_start <= @len and @len < len_end) OR 
      (len_end is null AND len_start <= @len)
于 2013-04-17T05:36:33.997 回答