我在 mysql 表上有一列主要存储数值,但有时存储字符串。它被定义为 VARCHAR(20)。此列上有前四个字符的索引。
ADD INDEX `refNumber` USING BTREE(`refNumber`(4));
由于该字段主要是数字,因此用户能够查询落在数字范围内(例如 100 到 2000)的值非常有用。如果我使用数字比较,则不使用此索引。
WHERE refNumber BETWEEN 100 AND 2000
如果我使用字符串比较,我会得到一些我不想要的值(例如,在查询 100 到 2000 的范围时返回 10000)。
WHERE refNumber BETWEEN '100' AND '2000'
有好的解决办法吗?
注意:有些值是在前面补零记录的,例如0234,在查找100到2000之间的值时应返回该值。
最佳答案
三种可能性
1) 将数值分隔到它们自己的列中。
2) 如果您必须保持原样,请确定数字的最大长度,将数字用零或空白填充到该长度。
3) 我不知道 MySQL 是否支持基于函数的索引,但这可能是一个选项。如果是这样,编写一个函数返回提取的数值并将其用作索引的基础。
关于mysql - 使用字符索引查找数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751804/