如何将mysql中以逗号分隔的值拆分为行?

u0njafvf  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(345)

我在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上的其他问题不同,因为我的要求非常简单,其他解决方案的派生将是一个过度的工作。类似于split()函数或非常简单的实现。

w80xi6nr

w80xi6nr1#

您可以使用find\ in\ u 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);

相关问题