这是我的表:
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
如何获得预期结果?
答案 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会出现在字典中!你可以做一些凌乱的事情,比如用零填充前填充或分别处理数字和字母值。