Mysql 如何在SQL查询中比较逗号分隔的数值

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这回答了问题的原始版本

考虑一个表,该表的结果值存储在一个单列字段中,字段中有三条记录,数据类型定义为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这回答了问题的原始版本

    使用
    子字符串\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
              );