当前位置: 首页 > 面试题库 >

如何在MySQL中将逗号分隔的值分成几行?

广晔
2023-03-14
问题内容

我在MySQL中有一个函数,该函数返回由逗号分隔的整数值列表,从而形成一个字符串。

例如

MyFunction(23);

退货

----------------------
|  MyFunction(23)    |
|--------------------|
|  34,45,87,23,1     |
----------------------

这是后端(Java)所需的简单功能-但是现在,由于建议了新功能,我需要这些结果用于另一个查询,该查询可能正在使用 IN
关键字遍历这些查询,如下所示:

SELECT id, myItemId, myItemValue, myDateTime 
FROM 
items where id 
IN (select MAX(id) from items where myItemId=1  
    and myItemValue 
    IN (select MyFunction(123)) 
group by myItemId);

作为单个csv元素,MyFunction(23)的结果不可迭代。如果我可以使用某些函数,例如Split(MyFunction(23))可以生成结果的函数,则以下内容将非常适合我的查询,而无需进行过多更改。

这是我期望的结果:

-----------------------------
|  Split(MyFunction(23))    |
|---------------------------|
|  34                       |
|  45                       |
|  87                       |
|  23                       |
|  1                        |
-----------------------------

还要注意的另一件事是MyFunction()可能返回空结果或具有单个元素(没有逗号)的结果。

我可以创建一个内置函数还是一个简单函数来获得相同的功能?

这与其他关于stackoverflow的问题不同,因为我的要求非常简单,而其他html" target="_blank">解决方案的派生将是一个过大的杀伤力。看起来类似于split()函数或一个非常简单的实现。


问题答案:

您可以使用FIND_IN_SET函数。例如:

SELECT FIND_IN_SET('34', '34,45,87,23,1'); -- return true

SELECT FIND_IN_SET('34', '34'); -- return true

SELECT FIND_IN_SET('34', ''); -- return false

在您的情况下,SQL查询将如下所示:

SELECT id,
       myItemId,
       myItemValue,
       myDateTime
FROM items
WHERE id IN
    (SELECT MAX(id)
     FROM items
     WHERE myItemId=1
       AND FIND_IN_SET(myItemValue, MyFunction(123))
     GROUP BY myItemId);


 类似资料:
  • 问题内容: 我有一个未标准化的表,其中的列包含逗号分隔的列表,该列表是另一个表的外键: 我想将此数据读入不提供过程语言的搜索引擎中。 那么,有没有一种方法, 要么 就这一栏中加入 或 该数据运行查询插入相应的条目到一个新的表?结果数据应如下所示: 如果DBMS支持返回表的函数,但MySQL显然不支持,我可以想到一个解决方案。 问题答案: 在MySQL中,可以通过以下方式实现 现在要获取逗号分隔的v

  • 问题内容: 我的数据库中有列,其中的值如下所示: 在虚拟列中没有任何编号。逗号分隔的值可以出现。我尝试了以下查询,但它正在创建重复的结果。 我不明白这个问题。谁能帮忙? 问题答案: 非常适合我- 还有许多其他方法可以实现它。阅读将单个逗号分隔的字符串拆分成行。 *关于使用列而不是单个字符串值时的重复项的 *更新 。只见PRIOR子句中使用DBMS_RANDOM的摆脱循环回路的在这里 尝试以下方法

  • 问题内容: 我的一个表中有一列,其中存储多个用逗号分隔的ID。有没有一种方法可以在查询的“ IN”子句中使用此列的值。 column()的值类似于 我需要用作 我对Crozin的回​​答感到满意,但我愿意接受建议,观点和选择。 随时分享您的观点。 问题答案: 以@Jeremy Smith的FIND_IN_SET()示例为基础,您可以使用联接来完成此操作,因此不必运行子查询。 这是众所周知的非常表现

  • 问题内容: 我有一个包含逗号分隔值的MySQL表,如下所示: 我要选择其集合中的行。我怎样才能做到这一点? 问题答案: 怎么样

  • 问题内容: 当我有1、2、3等字符串列表时,我想将此列用作一列 是否可以通过sql查询? 例如) <-我知道这不起作用。 问题答案: 使用任意数字的子查询来分割您的字符串。您可以使用‘1,2,3’代替vals。 看到它正常工作

  • 问题内容: 我有2张桌子和。表包含客户的电子邮件。 我正在使用PHP-IMAP从电子邮件服务器获取电子邮件,然后将其保存到数据库表。 该表有2个字段,并且字段包含逗号分隔的值。 我需要获取从第一台邮件,然后搜索对与上。 首先,我考虑了要搜索的条件,但我想拥有类似的东西或其他东西。 我怎样才能更好地做到这一点?(由于某些原因,我无法在此表上使用关系) 请指教。 问题答案: 基于FIND_IN_SET