Mysql 如何在SQL查询中比较逗号分隔的数值
考虑一个表,该表的结果值存储在一个单列字段中,字段中有三条记录,数据类型定义为Varchar,如下所示Mysql 如何在SQL查询中比较逗号分隔的数值,mysql,sql,comma,Mysql,Sql,Comma,考虑一个表,该表的结果值存储在一个单列字段中,字段中有三条记录,数据类型定义为Varchar,如下所示 12.2958104,12.0769 12.9715987,12.1053 12.5358104,12.07 参考上表,有三条记录。我们需要在一定范围内比较纬度值 SELECT * FROM `table_name` WHERE lat >= 12.07 and lat <= 12.53 从'table_name'中选择*,其中lat>=12.07和lat这回答了问题的原始版本
SELECT * FROM `table_name` WHERE lat >= 12.07 and lat <= 12.53
从'table_name'中选择*,其中lat>=12.07和lat这回答了问题的原始版本
使用子字符串\u index()
:
选择*
从`表\名称`
其中(子串_指数(lat,,,,1)+0>12.07和
子串_指数(lat',,1)+0<12.53
)或
(子串_指数(lat,,,,-1)+0>12.07和
子串_指数(lat,,,,-1)+0<12.53
);
为什么你的版本不起作用?因为您使用的是伪造的数据格式。不应将值存储在分隔字符串中。以下是一些原因:
- 数字不应存储为字符串
- SQL的字符串解析能力非常差
- 不应在单个列中存储多个值
- SQL具有这些用于存储单个值的优秀结构。它们被称为“列”和“表”。使用它们李>
这回答了问题的原始版本
使用
子字符串\u index()
:
选择*
从`表\名称`
其中(子串_指数(lat,,,,1)+0>12.07和
子串_指数(lat',,1)+0<12.53
)或
(子串_指数(lat,,,,-1)+0>12.07和
子串_指数(lat,,,,-1)+0<12.53
);
为什么你的版本不起作用?因为您使用的是伪造的数据格式。不应将值存储在分隔字符串中。以下是一些原因:
- 数字不应存储为字符串
- SQL的字符串解析能力非常差
- 不应在单个列中存储多个值
- SQL具有这些用于存储单个值的优秀结构。它们被称为“列”和“表”。使用它们李>
我认为您的查询有误,您的意思是第二个lat应该是long@RickRongen不,我只考虑用逗号分隔的纬度值。但我有经度值,它是用不同的值分开的,若你们的值存储为string/varchar,那个么看看Gordon的答案。否则,我不理解您的数据结构,您能否指定表\u name
中的列及其各自的数据类型?我认为您在查询中输入了一个错误,似乎您的意思是第二个lat应该是long@RickRongen不,我只考虑用逗号分隔的纬度值。但我有经度值,它是用不同的值分开的,若你们的值存储为string/varchar,那个么看看Gordon的答案。否则我不理解你的数据结构,你能用它们各自的数据类型指定表_name
中的列吗?你能试着回答编辑过的帖子吗@Gordon Linoff如果不使用子字符串_index(),您也可以回答同样的问题@Gordon Linoff我们该如何解决Eg问题@Gordon Linoff你能试着为这篇编辑过的文章回答吗@Gordon Linoff如果不使用子字符串_index(),您也可以回答同样的问题@Gordon Linoff我们应该如何解决Eg问题@Gordon Linoff
SELECT *
FROM `table_name`
WHERE (substring_index(lat, ',', 1) + 0 > 12.07 AND
substring_index(lat, ',', 1) + 0 < 12.53
) OR
(substring_index(lat, ',', -1) + 0 > 12.07 AND
substring_index(lat, ',', -1) + 0 < 12.53
);