在MySQL查询中使用索引关注

时间:2019-10-24 15:57:11

标签: mysql

我正在尝试查找mysql列值之间是否存在数值。 例如,我在mysql列中有一个值100-101,并且我正在寻找101是否与任何匹配。为此,我做了一个mysql查询

SELECT * 
FROM test_lookup 
WHERE 
    form_relation ='Parent' 
    AND (
        '101' BETWEEN SUBSTRING_INDEX  (`scale_raw_score`,'-', 1) 
              AND SUBSTRING_INDEX(`scale_raw_score`,'-', -1) 
    ) 
    AND scale='SCI'

但是它返回了2列

1-2
100-101

为什么返回

 1-2
知道为什么吗?

1 个答案:

答案 0 :(得分:0)

您正在进行字符串比较,而您实际上想比较数字。从字符串角度来看,'101'实际上在'1''2'

之间

考虑更改此设置:

'101' BETWEEN SUBSTRING_INDEX(`scale_raw_score`,'-', 1) 
      AND SUBSTRING_INDEX(`scale_raw_score`,'-', -1)

收件人:

101 BETWEEN SUBSTRING_INDEX  (`scale_raw_score`,'-', 1) 
    AND SUBSTRING_INDEX(`scale_raw_score`,'-', -1)

使用BETWEEN左侧的数字代替字符串就足以表明MySQL您希望将数值作为数字而不是字符串进行比较。

Demo on DB Fiddle

SELECT '101' BETWEEN '1' AND '2'
| '101' BETWEEN '1' AND '2' |
| ------------------------: |
|                         1 |
SELECT 101 BETWEEN '1' AND '2'
| 101 BETWEEN '1' AND '2' |
| ----------------------: |
|                       0 |