m0_58392051 2024-06-10 20:45 采纳率: 33.3%
浏览 6
已结题

#查询一个字段中包含某个精确值的所有结果

高斯数据库中查询某个字段包含某个精确值,该字段是存了多个值中间用逗号隔开,用like 是错的,find in set函数高斯库也不支持,请问还有别的函数可以查询吗?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-10 20:45
    关注

    引自免费微信小程序:皆我百晓生

    在高斯数据库中,处理存储了多个值并用逗号分隔的字段时,确实不能直接使用LIKE,因为这可能会导致不准确的结果。由于FIND_IN_SET函数不被支持,我们可以采取另一种策略:使用SQL字符串操作函数来分割字段中的值,并检查所需的值是否存在于这些值中。

    下面是一个示例SQL查询,用于查找字段my_field中包含特定值(例如'apple')的所有记录。这里我们假设my_table是表名,my_field是包含多个值的字段。

    SELECT *
    FROM my_table
    WHERE strpos(my_field, ',apple,') > 0 OR strpos(my_field, 'apple,') = 1 OR strpos(my_field, ',apple') = length(my_field) - length('apple') + 1;
    

    这个查询的工作原理如下:

    • strpos函数用于查找子字符串在主字符串中的位置。
    • 第一个条件strpos(my_field, ',apple,') > 0检查'apple'是否位于两个逗号之间,即它不是列表的开头或结尾。
    • 第二个条件strpos(my_field, 'apple,') = 1检查'apple'是否是列表的开头。
    • 第三个条件strpos(my_field, ',apple') = length(my_field) - length('apple') + 1检查'apple'是否是列表的结尾。

    然而,这种方法在处理非常大的数据集时可能效率较低,因为它涉及到多次字符串操作。如果性能是个问题,考虑将数据结构改为每行一个值,或者使用数组类型,如果高斯数据库支持的话。

    另一种方法是使用正则表达式,如果高斯数据库支持正则表达式匹配的话,这通常更简洁且高效:

    SELECT *
    FROM my_table
    WHERE my_field ~* '(^|,)(apple)(,|$)';
    

    在这个正则表达式中:

    • (^|,)匹配列表的开始或逗号之后的位置。
    • (apple)匹配字符串'apple'。
    • (\,|$)匹配逗号之前或列表的结束。

    以上两种方法应能帮助你在高斯数据库中找到包含特定值的所有记录。如果需要进一步的优化或有其他特殊需求,请详细描述,以便提供更具体的帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 创建了问题 6月10日