文本日期日期格式SQL phpmyadmin

时间:2019-01-14 11:01:20

标签: mysql sql phpmyadmin

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

我尝试STR_TO_DATE,转换和其他-输出为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 moder ORDER BY COUNT(*) DESC') or die(mysqli_error($link));

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

3 个答案:

答案 0 :(得分: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格式的日期戳的新列。这样,您的日期范围选择就可以利用索引。如何做到这一点超出了您今天的问题范围。

答案 1 :(得分:0)

您应该以这种方式使用str_to_date

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

答案 2 :(得分:0)

这对我有用。

$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