【问题标题】:How to separate value by using comma my SQL?如何使用逗号分隔值 mySQL?
【发布时间】:2023-03-18 08:44:01
【问题描述】:

我的表格列有这样的行,例如 1001、1002、1003 等,以逗号分隔。每列中可能有 1 个或多个逗号分隔值。我需要表格中这些逗号分隔值的总数。例如,如果我的表有 2 行,一个有 1001、1002、1003、1004,另一个有 1001、1005,我应该得到的输出是 6,即 4+2。请帮忙

【问题讨论】:

  • 您真的应该考虑normalizing your data,它会让您的应用程序更加更容易构建、更易于维护并且(通常)更快。
  • 它必须在 MySQL 中,还是可以接受 php(或其他服务器端语言)?
  • 这里是 MySQL 字符串函数的链接:dev.mysql.com/doc/refman/5.6/en/string-functions.html。我看到的函数会在字段中找到 where 可以找到逗号,但不能找到 多少 逗号。

标签: mysql


【解决方案1】:

mysql 中没有计算字符出现次数的函数。但是您可以用任何内容替换每个逗号。然后计算长度差,得到逗号的个数,比值的个数少一。

select
( LENGTH(col1) - LENGTH(REPLACE(col1, ',', '')) + 1 )
+ ( LENGTH(col2) - LENGTH(REPLACE(col2, ',', '')) + 1 ) 
AS valCount
from T;

(没有明确地测试,但至少有一些非常相似的东西可以完成这项工作。)

replace() length()

【讨论】:

  • 好主意。不过,我认为您需要对其求和,并且可能希望将不同的列作为不同的计数。
  • 好吧,他询问了总数。这将是每行。
  • 好的,我知道你从哪里来:他首先说“每列中的值”。我以另一种方式阅读它,他的示例说他将数据汇总为 2 行。
【解决方案2】:

试试:

SELECT SUM(LEN(ColumnName) - LEN(REPLACE(ColumnName, ',', ''))) FROM TableName

【讨论】:

    【解决方案3】:

    这是在服务器端脚本中访问数据库比访问数据库本身要容易得多的任务之一。假设您已经将逗号分隔的字符串分配给一个数组(其中 $array[1] 等于第 1 行的字符串:

    $array = array("1001, 1002, 1003, 1004", "1001, 1005"); // assigned from database
    foreach($array as $k => $v){
        $numbersInString[$k] = count(explode(', ', $v));
    }
    echo implode(' + ',$numbersInString);
    

    这在 MySQL 中通过创造性的解决方案(例如来自 Raffael1984 的解决方案)是可能的,但在 PHP 中似乎更容易、更简洁地实现。


    参考:

    【讨论】:

      【解决方案4】:

      您是否尝试过使用 count() 函数?如果需要,您可以指定哪些行。

      .row[COUNT(name)]
      

      在您的查询中。你的桌子是什么样子的?如果我知道它的样子,我可能会提供更多帮助

      【讨论】:

      • COUNT 用于计算行数,而不是行内逗号的出现次数。
      • 我认为他需要计算行中“数字”的数量。如果您有一行指定该数据的位置,则 COUNT 将返回项目数
      • @Xiphos:OP 有一个字段,字面上包含1,2,3,4,...。它不是该字段的多行,每个字段都有一个值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多