SQL组按字符串的一部分

时间:2013-11-21 15:46:35

标签: sql oracle

我的表格中有

这样的条目
01-JAN-92 12.00.00.000000000 AM -04:00
01-JAN-86 12.00.00.000000000 AM -04:00
03-JAN-01 12.00.00.000000000 AM +00:00
03-JAN-01 12.00.00.000000000 AM -04:00

我希望能够计算特定日期的所有条目,而不是考虑时间(最后两个条目)。

到目前为止,这就是我所拥有的

SELECT ACTIONDATE, count(ACTIONDATE) AS count FROM mytable GROUP BY ACTIONDATE

如何制作它以便仅按日而不是整个条目进行分组?

3 个答案:

答案 0 :(得分:2)

使用date()函数:

SELECT DATE(ACTIONDATE),
  COUNT(ACTIONDATE) AS count
FROM mytable
GROUP BY DATE(ACTIONDATE)
编辑:抱歉。这实际上是mysql格式。对于Oracle格式,选择的答案更合适。

答案 1 :(得分:2)

You can easily use the SUBSTRING function :
SELECT SUBSTRING(ACTIONDATE, 1, 9) as ACTION_Day,COUNT(SUBSTRING(ACTIONDATE, 1, 9)) AS        count FROM table1  GROUP BY SUBSTRING(ACTIONDATE, 1, 9)

output:
01-JAN-86 1
01-JAN-92 1
03-JAN-01 2

答案 2 :(得分:1)

您可以使用TRUNC删除时间部分:

SELECT TRUNC(ACTIONDATE, 'DD'), count(1) AS count
  FROM mytable
GROUP BY TRUNC(ACTIONDATE, 'DD');

TRUNC将日期的一部分截断到指定的部分,在本例中为截止日期。

例如,在SYSDATE上使用带有'DD'的TRUNC返回:

SELECT TRUNC(SYSDATE, 'DD') FROM dual;
TRUNC(SYSDATE,'DD')
-------------------
13/11/21 00:00  

TRUNC function in documentation