保存在一个字段中的范围之间的SQL查询(例如:1; 10)

时间:2015-08-14 08:04:24

标签: mysql sql range

我想知道是否可以在数据库中保存的范围之间进行SQL查询:

  

1; 10

其中1是最小值,10是最大值。

例如:

我们说我有一个专栏'人员'并且数据保存如上。现在我想查询5在保存范围之间的所有行。

这可能吗?

3 个答案:

答案 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)

SQL Fiddle

数据库架构

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)

希望这有帮助