MySQL选择创建日期的显示号码

时间:2016-05-17 08:26:57

标签: php mysql

创建行时,我有一个包含时间戳的列。

我需要找到一种方法来获取同一天的所有行,并为每一行显示一个显示数字,以显示如下内容:

+---------------------+
| order_date          | // output should be:
+---------------------+
| 2016-05-11 13:01:41 | // 2016051101
| 2016-05-11 15:54:14 | // 2016051102
| 2016-05-11 17:16:18 | // 2016051103
| 2016-05-11 17:35:12 | // 2016051104
| 2016-05-11 17:55:16 | // 2016051105
| 2016-05-12 07:16:48 | // 2016051201
| 2016-05-12 09:30:57 | // 2016051202
| 2016-05-12 09:56:19 | // 2016051203
| 2016-05-13 11:27:21 | // 2016051301
| 2016-05-14 10:15:56 | // 2016051401
| 2016-05-15 11:35:07 | // 2016051501
| 2016-05-15 11:39:48 | // 2016051502
| 2016-05-15 11:40:12 | // 2016051503
+---------------------+

Mysql可以这样做吗?或者程序,如php,应该处理这个?

我使用的最终查询:

    SELECT t.order_date, 
    concat(
    DATE_FORMAT(t.order_date, '%Y%m%d'), 
    LPAD(
(SELECT COUNT(*) FROM hz_order s WHERE s.order_date<= t.order_date AND DATE(s.order_date) = DATE(t.order_date)),
2,
0))display 
    FROM hz_order t 
    ORDER BY `display` ASC 

3 个答案:

答案 0 :(得分:3)

是的,您可以使用相关查询来执行此操作,如下所示:

SELECT t.order_date,
       concat(DATE_FORMAT(t.order_date, '%Y%m%d'),
              (SELECT COUNT(*) FROM YourTable s
               WHERE s.order_date<= t.order_date
                 AND DATE(s.order_date) = DATE(t.order_date)))
FROM YourTable t

这将生成日期为yyyymmdd +计数。

答案 1 :(得分:0)

是的,你可以通过 -

来做到这一点
SELECT CONCAT(DATE_FORMAT(date_field, '%Y%m%d'), 
LPAD(COUNT(date_field), 2, '0')) 
FROM table_name
GROUP BY DATE(date_field)
ORDER BY date_field DESC

DATE_FORMAT(date_field, '%Y%m%d')会将日期格式化为yyyymmdd

LPAD(COUNT(date_field), 2, '0')会生成一个字符串,其左边填充(0)到2个位置,并带有该日期的计数。

答案 2 :(得分:0)

这是使用MySQL的一种方式。其他方法在较大的数据集上会更快。

SELECT x.*
     , CONCAT(DATE_FORMAT(x.order_date,'%Y%m%d'),LPAD(COUNT(*),2,0))oi 
  FROM my_table x 
  JOIN my_table y 
    ON DATE(y.order_date) = DATE(x.order_date) 
   AND y.order_date <= x.order_date 
 GROUP  
    BY x.order_date;