现有表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的不清楚
大于3000:>3000
小于3000:<3000
2000到3000之间: between 2000 and 3000
MSSQL的这样写就包括了2000和3000这两个值在内。MYSQL的不清楚
#2
但是 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应该也是这样
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
在MYSQL下实行不了。
#7
select *
FROM `work`
WHERE substring_index(`salary` ,'-',1)+0 <=3000
and substring_index(`salary` ,'-',-1)+0 >=3000
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 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗
-----------------
1 2000-3000
----------------
2 4000-5000
+======================
salary 这个字段的类型是字符串吧,用 between 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗
#10
把表设计成
(id ,min_num ,max_num)
容易处理一点
(id ,min_num ,max_num)
容易处理一点
#11
是保存了一个范围,但是用在搜索时想把一定范围的都查找出来
#1
英语中between and表示在什么之间,数据库也不例外啊,你都没有and,当然是空的
大于3000:>3000
小于3000:<3000
2000到3000之间: between 2000 and 3000
MSSQL的这样写就包括了2000和3000这两个值在内。MYSQL的不清楚
大于3000:>3000
小于3000:<3000
2000到3000之间: between 2000 and 3000
MSSQL的这样写就包括了2000和3000这两个值在内。MYSQL的不清楚
#2
但是 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应该也是这样
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
在MYSQL下实行不了。
#6
貌似MYSQL也是一样的呀?参考:
http://zhidao.baidu.com/question/323155827.html
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
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 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗
-----------------
1 2000-3000
----------------
2 4000-5000
+======================
salary 这个字段的类型是字符串吧,用 between 这个比较合适吗?你保存的就是一个范围,这不是自己找麻烦吗
#10
把表设计成
(id ,min_num ,max_num)
容易处理一点
(id ,min_num ,max_num)
容易处理一点
#11
是保存了一个范围,但是用在搜索时想把一定范围的都查找出来