【问题标题】:Find Number of Matched Expressions in a String mySQL查找字符串 mySQL 中匹配表达式的数量
【发布时间】:2012-08-30 16:33:58
【问题描述】:

我的 mySQL 数据库中有一个列,它将日期存储在逗号分隔的列表中。由于这个数据库的需要和动态结构,它需要是一个逗号分隔的列表,格式如下:

date,date,date,date,date,date,date,date

一个真实的集合可能是这样的:

2012-01-01,2012-03-12,,,,,,

我需要能够在我的查询中计算此列表中的日期数。对于上面的示例集,该集中的日期数为两个(2012-01-01 和 2012-03-12)。出于我的目的,我需要知道此列表中是否有 8 个日期。我已经找到了不同的解决方案,并且通过类似这样的方法获得了成功,给了我数字 1 在字符串中的次数:

LENGTH(_COLUMN_) - LENGTH(REPLACE(_COLUMN_, '1', ''))

如果我将“1”更改为正则表达式,那么我无法让它工作。部分问题是我也找不到一个正则表达式的解决方案,它可以准确地找到 ####/##/## 而不是日期的任何其他变体。

我仍在学习 mySQL 和正则表达式,正在寻求帮助。

谢谢。

【问题讨论】:

  • 我绝对无法想象一个单一的原因,为什么需要在列中使用逗号分隔的列表。没有冒犯,但这种“动态”在哪里?更改数据库设计!
  • 100% 同意@tombom;但作为一项纯粹的智力练习,我想你可以数连字符并除以二......
  • @tombom 我们必须为临时表格收集很多日期。我不想为我们需要收集的 26 个不同日期创建一个新专栏。相反,我尝试使用包含逗号分隔的日期列表的三列(代表 3 个表格),因此我们不必有 26 个不同的列粘在表格中。当每列中有一定数量的日期时,列/表格就完成了。感谢您对结构的任何帮助!
  • @JonnyJesperson 创建一个新问题并显示您当前的数据库架构。并接受以下答案之一。

标签: mysql regex count match


【解决方案1】:

你可以用 php 做到这一点吗?

将结果放入变量中,然后:

$variable=date,date,date,date,date,date,date,date;
$array=explode(",",$variable);
$count=count($array);

这样做是用逗号分割字符串并将其插入到带有explode 的数组中,然后count 正在计算数组中元素的数量。

Explode, Count

也适用于您的其他解决方案:

LENGTH(_COLUMN_) - LENGTH(REPLACE(_COLUMN_, '1', ''))

难道不能简单地做:

LENGTH(_COLUMN_) - LENGTH(REPLACE(_COLUMN_, ',', ''))

并计算逗号的数量,因为您说格式将是逗号分隔的日期,连字符作为分隔符,如果您计算 7 个逗号,您将知道您有 8 个日期。

【讨论】:

    【解决方案2】:

    包含 8 个日期的字符串不会正好是 87 个字符吗?

    如果您担心字符串中的实际值,split them out

    哦,重新设计您的架构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2018-07-16
      • 2015-06-15
      • 2015-04-02
      • 2017-08-29
      • 1970-01-01
      相关资源
      最近更新 更多