【问题标题】:Text date to dateformat SQL phpmyadmin文本日期到日期格式 SQL phpmyadmin
【发布时间】:2019-01-14 11:01:19
【问题描述】:

我正在尝试显示特定用户当月的记录数。不幸的是,它不起作用,因为有一次,数据库中的日期格式没有正确指示。 文本列,日期以纯文本格式写入。 怎样成为?我试了很多次,都没有出来。

我尝试了 STR_TO_DATE、convert 和其他 - 输出为 null 或 mysql 错误。 我还尝试手动将请求输入到 phpmyadmin。不成功。

Mysql 版本:5.6.39-83.1 (Linux)

$modercount = mysqli_query($link, 'SELECT moder, COUNT(*) FROM my_logs WHERE server="'.$profileid.'" AND MONTH(time) = MONTH(NOW()) AND YEAR(time) = YEAR(NOW()) GROUP BY 现代 ORDER BY COUNT(*) DESC') or die(mysqli_error($link));

我的sql列中的日期格式:10.04.2018 12:52:18

【问题讨论】:

    标签: mysql sql phpmyadmin


    【解决方案1】:

    首先,将您的文本格式日期正确翻译为 DATETIME。 STR_TO_DATE() uses the same format strings as its reverse, DATE_FORMAT().

     SELECT STR_TO_DATE(`time`, '%Y.%m.%d %H:%i:%s')
    

    其次,像这样选择你需要的日期戳的范围,使用LAST_DAY()来处理月份算术。

     WHERE  STR_TO_DATE(`time`, '%Y.%m.%d %H:%i:%s') 
                    >= LAST_DAY(CURDATE) + INTERVAL 1 DAY - INTERVAL 1 MONTH
       AND  STR_TO_DATE(`time`, '%Y.%m.%d %H:%i:%s')
                    <  LAST_DAY(CURDATE) + INTERVAL 1 DAY
    

    如果有机会,请在表中添加一个新列,其中包含 DATETIME 或 TIMESTAMP 格式的日期戳。这样,您的日期范围选择可以利用索引。如何做到这一点超出了您今天的问题范围。

    【讨论】:

      【解决方案2】:

      你应该这样使用 str_to_date

       select str_to_date('10.04.2018 12:52:18', '%d.%m.%Y %T')
      

      【讨论】:

        【解决方案3】:

        这对我有用。

        $modercount = mysqli_query($link, 'SELECT moder, COUNT(*) FROM mylogs WHERE server="'.$profileid.'" AND MONTH(str_to_date(`time`, "%d.%m.%Y %T")) = MONTH(NOW()) AND YEAR(str_to_date(`time`, "%d.%m.%Y %T")) = YEAR(NOW()) GROUP BY moder ORDER BY COUNT(*) DESC') or die(mysqli_error($link));
        

        非常感谢@scaisedge 和@o-jones

        【讨论】:

          猜你喜欢
          • 2018-01-28
          • 1970-01-01
          • 2016-12-02
          • 2013-01-21
          • 1970-01-01
          • 1970-01-01
          • 2011-06-22
          • 1970-01-01
          相关资源
          最近更新 更多