在sql中创建一个范围为列的表

时间:2013-10-04 10:01:39

标签: sql

我需要创建一个这样的表..

claim amount      court fee
exceed 300          15
301-500             30
501-1000            55  

依旧......

我试了一下我的索赔金额是nvarchar并且法院费用是浮动的我将nvarchar转换为数字时出错。

当我在select * from table where claim amount <=250上尝试此查询时,它会显示所有行。我对索引金额应该使用什么数据类型感到困惑,如何在检索查询时具体如何&lt; = 275 ...

2 个答案:

答案 0 :(得分:2)

我会创建一个包含起始值和结束值的表,其中开始值为null,结束值为结束值。

这样的东西
DECLARE @Table TABLE(
    ID INT IDENTITY (1,1),
    StartValue FLOAT,
    EndValue FLOAT,
    FeeValue FLOAT
)

INSERT INTO @Table SELECT null,300,15
INSERT INTO @Table SELECT 301,500,30
INSERT INTO @Table SELECT 501,1000,50
INSERT INTO @Table SELECT 1001,null,100

DECLARE @LookupValue FLOAT = 275

SELECT  *
FROm    @Table
WHERE   ISNULL(StartValue, @LookupValue) <= @LookupValue
AND     ISNULL(EndValue, @LookupValue) >= @LookupValue

SQL Fiddle DEMO

答案 1 :(得分:0)

您应该将其拆分为2列,使其类型为int

MinClaimAmount和MaxClaimAmount(否则你将不得不进行字符串拆分和其他废话)。

MinClaimAmount  MaxClaimAmount     courtFee
0                  300                15
301                500                30
501                1000               55

然后,你的SQL将是(如果你想要一个特定的行)

select * from  table where MinClaimAmount <= 275 AND MaxClaimAmount >= 275

SQL Fiddle