【问题标题】:Show date from a chain of characters从字符链显示日期
【发布时间】:2026-02-22 06:20:03
【问题描述】:

这是我的第一个问题,感谢您的支持。

我有一个包含许多列的旧数据库,但它不是 DATE 列。是的,我的错。

但是,我有一个名为 question_id 的列,其中包含一些数据,其中包含日期和时间,例如

2017113020440370769

其中前 4 位是 YYYY,接下来的 2 位是 MM,接下来的 2 位是 DD。

我正在尝试提取这些字符来计算我在特定日期有多少问题。

我可以,在特定日期这样做:

SELECT COUNT(*) 
FROM questions 
WHERE question_id LIKE '20171228%'; 

但我想每天为 TODAY 自动执行此操作,而不是每天输入 YYYYMMDD%

有可能吗?使用 CURDATE?或者我可以使用任何特定的 TIMESTAMP?

非常感谢!

【问题讨论】:

  • 使用正则表达式提取日期,然后将其作为结果集的一部分进行分组。我实际上建议添加一个日期字段,更新应用程序以设置它(MySQL 没有自动设置时间戳的功能吗?)然后更新现有的空时间戳一次。但真正做到这一点应该在小桌子上完成。如果没有架构和示例数据,我无法将其转化为答案。

标签: mysql date timestamp


【解决方案1】:

是的,可以,您可以使用通配符构建当前日期,如下所示:

SELECT COUNT(*) 
FROM questions 
WHERE question_id LIKE CONCAT(DATE_FORMAT(CURDATE(), '%Y%m%d'), '%'); 

这是针对特定日期的;今天。对于所有日期,您必须对 question_id 的日期部分进行聚合,如下所示:

SELECT SUBSTR(question_id,1,8) ASKED_ON, COUNT(*) NUMBER_OF_QUESTIONS
FROM questions 
GROUP BY SUBSTR(question_id,1,8);

【讨论】:

    【解决方案2】:

    这些都是你需要的砖块 ;-)

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT LEFT('20171228ASD',8) = CURRENT_DATE();
      
      
      SELECT COUNT(*) 
      FROM questions 
      WHERE LEFT(question_id',8) = CURRENT_DATE();
      

      【讨论】: