我想知道是否可以在数据库中保存的范围之间进行SQL查询:
1; 10
其中1是最小值,10是最大值。
例如:
我们说我有一个专栏'人员'并且数据保存如上。现在我想查询5在保存范围之间的所有行。
这可能吗?
答案 0 :(得分:3)
你可以查看this帖子,它解释了如何在单个MySQL字段中存储元组。然而,它确实使事情变得复杂很多。
我不太了解您的实际用例,但在将其保存到数据库之前,我肯定会尝试拆分最小值和最大值。然后,只需使用BETWEEN
SQL语句
CREATE TABLE `example` (
`val` int(10) unsigned NOT NULL,
`min` int(10) NOT NULL,
`max` int(10) NOT NULL
);
SELECT * FROM example
WHERE val BETWEEN min AND max;
我知道你明确表示你希望它保存在一列中,但这根本不是数据库的设计目的。它们设计用于保存原始数据,以及由特定字符分隔的值列表,无论多么简单明了,处理或格式化数据
答案 1 :(得分:1)
数据库架构
create table person
(rng varchar(10));
insert into person values ('1;10');
insert into person values ('12;100');
选择查询
SELECT
rng, cast(SUBSTRING_INDEX(rng, ';', 1) as unsigned) as rangestart,cast(SUBSTRING_INDEX(rng, ';', -1) as unsigned) as rangeend
from person
where 5 between cast(SUBSTRING_INDEX(rng, ';', 1) as unsigned) and cast(SUBSTRING_INDEX(rng, ';', -1) as unsigned)
<强>输出强>
| rng | rangestart | rangeend |
|------|------------|----------|
| 1;10 | 1 | 10 |
答案 2 :(得分:0)
您可以拆分并检查。
DECLARE @YourVariableInBetween INT;
SELECT PersonFullName
FROM PersonTable
WHERE @YourVariableToCheck BETWEEN CAST((SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(YourRange, ';', 1), ';', -1)) AS UNSIGNED)
AND CAST((SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(YourRange, ';', 2), ';', -1)) AS UNSIGNED)
希望这有帮助