关于mysql 如何查找某一数字范围

时间:2021-09-05 14:44:10
关于mysql 如何查找某一数字范围

现有表work 有字段id , salary


id   salary
-----------------
1       2000-3000
----------------
2       4000-5000




用SELECT * FROM `work` WHERE `salary` BETWEEN 3000  但是返回的查询结果为空

要怎样才能查找出在3000范围的值。 

11 个解决方案

#1


英语中between and表示在什么之间,数据库也不例外啊,你都没有and,当然是空的

大于3000:>3000
小于3000:<3000
2000到3000之间: between 2000 and 3000

MSSQL的这样写就包括了2000和3000这两个值在内。MYSQL的不清楚

#2


引用 1 楼 travylee 的回复:
英语中between and表示在什么之间,数据库也不例外啊,你都没有and,当然是空的

大于3000:>3000
小于3000:<3000
2000到3000之间: between 2000 and 3000

MSSQL的这样写就包括了2000和3000这两个值在内。MYSQL的不清楚



但是 between 3000 and 3500 也是查找不到啊.是不是某一范围内的数值不应该这样保存:2000-3000,那么要怎样保存呢?如果保存为3000这样可以查找出来,但是我想保存的值是在某一范围内,如:2000-3000 那么要怎样保存这个值。




#3


用字符串存入,查询的时候把它截取出来再用between and

#4


/*
id salary
-----------------
1 2000-3000
----------------
2 4000-5000
*/

--生成测试数据:
go
if OBJECT_ID('tbl') is not null
drop table tbl
go
create table tbl(
id int,
salary varchar(10)
)
go
insert tbl
select 1,'2001-3000' union all
select 2,'3001-4000' union all
select 3,'4001-5000' union all
select 4,'5001-6000' union all
select 5,'6001-7000'

select *from tbl

select *from tbl where cast(LEFT(salary,CHARINDEX('-',salary)-1) as int) between 2000 and 5000 
and cast(right(salary,CHARINDEX('-',salary)-1) as int) between 2000 and 5000

/*
id salary
1 2001-3000
2 3001-4000
3 4001-5000
*/

MSSQL中可以这样实现,MYSQL应该也是这样

#5


引用 4 楼 travylee 的回复:
/*
id salary
-----------------
1 2000-3000
----------------
2 4000-5000
*/

--生成测试数据:
go
if OBJECT_ID('tbl') is not null
drop table tbl
go
create table tbl(
id int,
salary varchar(10)
……



在MYSQL下实行不了。

#6


貌似MYSQL也是一样的呀?参考:
http://zhidao.baidu.com/question/323155827.html

#7


select *
FROM `work` 
WHERE substring_index(`salary` ,'-',1)+0 <=3000
and substring_index(`salary` ,'-',-1)+0 >=3000

#8


SELECT * FROM `work` WHERE BETWEEN('salary',0,3000)

#9


id salary
-----------------
1 2000-3000
----------------
2 4000-5000

+======================
salary  这个字段的类型是字符串吧,用 between 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗

#10


把表设计成 
(id ,min_num ,max_num)    
容易处理一点

#11


引用 9 楼 libo_sina 的回复:
id salary
-----------------
1 2000-3000
----------------
2 4000-5000

+======================
salary 这个字段的类型是字符串吧,用 between 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗


是保存了一个范围,但是用在搜索时想把一定范围的都查找出来

#1


英语中between and表示在什么之间,数据库也不例外啊,你都没有and,当然是空的

大于3000:>3000
小于3000:<3000
2000到3000之间: between 2000 and 3000

MSSQL的这样写就包括了2000和3000这两个值在内。MYSQL的不清楚

#2


引用 1 楼 travylee 的回复:
英语中between and表示在什么之间,数据库也不例外啊,你都没有and,当然是空的

大于3000:>3000
小于3000:<3000
2000到3000之间: between 2000 and 3000

MSSQL的这样写就包括了2000和3000这两个值在内。MYSQL的不清楚



但是 between 3000 and 3500 也是查找不到啊.是不是某一范围内的数值不应该这样保存:2000-3000,那么要怎样保存呢?如果保存为3000这样可以查找出来,但是我想保存的值是在某一范围内,如:2000-3000 那么要怎样保存这个值。




#3


用字符串存入,查询的时候把它截取出来再用between and

#4


/*
id salary
-----------------
1 2000-3000
----------------
2 4000-5000
*/

--生成测试数据:
go
if OBJECT_ID('tbl') is not null
drop table tbl
go
create table tbl(
id int,
salary varchar(10)
)
go
insert tbl
select 1,'2001-3000' union all
select 2,'3001-4000' union all
select 3,'4001-5000' union all
select 4,'5001-6000' union all
select 5,'6001-7000'

select *from tbl

select *from tbl where cast(LEFT(salary,CHARINDEX('-',salary)-1) as int) between 2000 and 5000 
and cast(right(salary,CHARINDEX('-',salary)-1) as int) between 2000 and 5000

/*
id salary
1 2001-3000
2 3001-4000
3 4001-5000
*/

MSSQL中可以这样实现,MYSQL应该也是这样

#5


引用 4 楼 travylee 的回复:
/*
id salary
-----------------
1 2000-3000
----------------
2 4000-5000
*/

--生成测试数据:
go
if OBJECT_ID('tbl') is not null
drop table tbl
go
create table tbl(
id int,
salary varchar(10)
……



在MYSQL下实行不了。

#6


貌似MYSQL也是一样的呀?参考:
http://zhidao.baidu.com/question/323155827.html

#7


select *
FROM `work` 
WHERE substring_index(`salary` ,'-',1)+0 <=3000
and substring_index(`salary` ,'-',-1)+0 >=3000

#8


SELECT * FROM `work` WHERE BETWEEN('salary',0,3000)

#9


id salary
-----------------
1 2000-3000
----------------
2 4000-5000

+======================
salary  这个字段的类型是字符串吧,用 between 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗

#10


把表设计成 
(id ,min_num ,max_num)    
容易处理一点

#11


引用 9 楼 libo_sina 的回复:
id salary
-----------------
1 2000-3000
----------------
2 4000-5000

+======================
salary 这个字段的类型是字符串吧,用 between 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗


是保存了一个范围,但是用在搜索时想把一定范围的都查找出来