在MySQL上的VARCHAR函数之间

时间:2016-01-18 08:07:35

标签: mysql

这是我的表:

id    Name    salary
------------------------------------
B101    mob    10000
B1000   John   1000000 
B1002   flip   10000
B1030   Bean   100000

这是我的疑问:

Select * from table 
where table.id >= 'B1000' and
table.id <= 'B1050'

这是我期待的结果:

id    Name    salary
------------------------------------
B1000   John   1000000 
B1002   flip   10000
B1030   Bean   100000

这就是我得到的:

id    Name    salary
------------------------------------
B1000   John   1000000 
B101    mob    10000 
B1002   flip   10000
B1030   Bean   100000

如何获得预期结果?

2 个答案:

答案 0 :(得分:1)

如果列 id 始终以B(或其他字符)开头,后跟数字,那么您可以尝试:

Select * from table 
where substr(table.id,2,length(table.id) - 1) >= 1000
and substr(table.id,2,length(table.id) - 1) <= 1050


说明:

假设你有这样的样本数据:

id
---------
A67
B32132
C89163

此查询:

select substr(table.id,2,length(table.id) - 1) as id from table

会产生:

id
----------
67
32132
89163

..substr(table.id,2...中的 2 表示从列ID中的字符2开始。

如果列ID有多个字符(比如3个字符),如

id
-----------
Azx67
Byx32132
Czx89163

您需要此查询:

select substr(table.id,4,length(table.id) - 3) as id from table

制作

id
-------------
67
32132
89163

..substr(table.id,4...中的 4 表示从列ID中的字符4开始 请注意,列应该有一个模式。如果样本数据如:

id
--------
A123
BB123
CCC23

您需要更复杂的查询才能获得所需的结果。实际上,不建议像这样填写 id 列。

您可以在 where子句中添加此内容,如:

Select * from table 
where substr(table.id,3,length(table.id) - 2) >= 1000 --start from characters 3 in column id
and substr(table.id,3,length(table.id) - 2) <= 1050 --start from characters 3 in column id

答案 1 :(得分:0)

B1000后,B101会出现在字典中!你可以做一些凌乱的事情,比如用零填充前填充或分别处理数字和字母值。