繁体   English   中英

在 sql 中插入值范围

[英]insert range of values in sql

CREATE TABLE RECHARGE(
R_LVL VARCHAR(20) NOT NULL PRIMARY KEY,
AMOUNT NUMBER,
POINTS_1 NUMBER
);

insert into RECHARGE
VALUES ('S1',(2950-4950),250);

我有上面的代码,我正在尝试为属性数量中的值插入一个范围,如下所示:

s1 : 2950-4950
s2: 5000-9950
s3: 10000-30000

所以每个lvl都有自己的数据范围,这可能吗?

数字数据类型不能存储特殊字符,如- 您必须使其成为 VARCHAR 或使用单个数字存储 2 行,例如 -

insert into RECHARGE
VALUES ('S1',2950,250);

insert into RECHARGE
VALUES ('S1',4950,250);

或者您也可以使用 2 列也像 FROM-TO 来显示您的日期范围,例如 -

CREATE TABLE RECHARGE(
R_LVL VARCHAR(20) NOT NULL PRIMARY KEY,
AMOUNT_FROM NUMBER,
AMOUNT_TO NUMBER,
POINTS_1 NUMBER
);

insert into RECHARGE
VALUES ('S1',2950,4950,250);

然后在 SELECT 查询中你可以生成你想要的结果。

范围由 2 个值组成,将其存储在 2 列中。

表达式(2950-4950)等于-2000 (2950 减去 4950)。

您应该创建两列或只存储范围的边界之一。 我建议存储这两个值,因为它更容易查询:

CREATE TABLE RECHARGE(
R_LVL VARCHAR(20) NOT NULL PRIMARY KEY,
LOWER_BOUNDARY NUMBER,
UPPER_BOUNDARY NUMBER,
POINTS_1 NUMBER
);

您需要确定边界是封闭的(<=、>=)还是开放的(<、>)。

所以你可以像这样查询它们:

SELECT * FROM Recharge WHERE LOWER_BOUNDARY <= 2000 AND UPPER_BOUNDARY > 2000

其中 2000 是您要查找范围的值。

你可以通过添加一些约束来使这个东西更安全:

  • CHECK 约束以确保 LOWER_BOUNDARY 低于 UPPER_BOUNDARY。
  • UNIQUE on LOWER_BOUNDARY 以消除重复
  • FOREIGN KEY 为当前 LOWER_BOUNDARY 引用先前范围的 UPPER_BOUNDARY(边界是连续的)

可以使用下一个查询

插入充值值 ('S1',(2950-4950),250) ('S2',(5000-9950),250) ('S3',(10000-30000),250);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM