MYSQL查询中的子字符串索引问题

MYSQL查询中的子字符串索引问题,mysql,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_I

我试图找出一个数值是否介于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' 选择* 从测试单元查找 哪里 表格_relationship='Parent' 及( 子字符串索引之间的“101”('scale\u raw\u score','-',1) 和子字符串索引(`scale\u raw\u score`、'-'、-1) ) 和scale='SCI' 但它返回了两列

1-2 100-101 1-2 100-101
为什么它返回1-2知道为什么吗?

您正在进行字符串比较,而实际上您想要比较数字。就字符串而言,
'101
'确实介于
'1'
'2'

1-2 考虑改变这一点:

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

在之间的
左侧使用一个数字而不是字符串应该足以指示MySQL您希望将值作为数字而不是字符串进行比较

SELECT '101' BETWEEN '1' AND '2'
|101介于“1”和“2”之间| | ----------------------: | | 0 |
您正在进行字符串比较,而实际上您想要比较数字。就字符串而言,
'101
'确实介于
'1'
'2'

考虑改变这一点:

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

之间的
左侧使用一个数字而不是字符串应该足以指示MySQL您希望将值作为数字而不是字符串进行比较

SELECT '101' BETWEEN '1' AND '2'
|101介于“1”和“2”之间| | ----------------------: | | 0 |
您正在比较字符串(不是数字)。您正在比较字符串(不是数字)。谢谢。除了0的情况外,你的建议都很有效。当我尝试使用“0”进行检查时,它从我的数据库中给出了不匹配的结果。所以我们是否需要将(consider)作为特例。@sruthy123:0
有什么问题?您可以在我提供的fiddlde中尝试这一点,它也起作用:
在“0”和“102”之间选择0
`从hello\u查找中选择*,其中表单为“关系”='Parent',(子字符串索引(
scale\u raw\u score
,'-',1)和子字符串索引(
scale\u raw\u score
,'-',1))和scale='SCI'`。它给出的结果为空项,
=102
0
=102
和一些空项请给我一个
刻度原始分数
的值,你可以得到
0之间的未预期结果。。。还有…
。谢谢。除了0的情况外,你的建议都很有效。当我尝试使用“0”进行检查时,它从我的数据库中给出了不匹配的结果。所以我们是否需要将(consider)作为特例。@sruthy123:0有什么问题?您可以在我提供的fiddlde中尝试这一点,它也起作用:
在“0”和“102”之间选择0
`从hello\u查找中选择*,其中表单为“关系”='Parent',(子字符串索引(
scale\u raw\u score
,'-',1)和子字符串索引(
scale\u raw\u score
,'-',1))和scale='SCI'`。它给出的结果为空项,
=102
0
=102
和一些空项请给我一个
刻度原始分数
的值,你可以得到
0之间的未预期结果。。。和…
SELECT 101 BETWEEN '1' AND '2'
| 101 BETWEEN '1' AND '2' | | ----------------------: | | 0 |