SQL Server:查找已转换数据的子字符串出现次数

时间:2017-09-01 11:45:55

标签: sql-server

我有大量数据,我想计算某列的出现次数。令人困惑的是,它不只是找到相同的列值,而只是它的一部分。

我的表格包含 TimeStamp 格式为( YYYY-MM-DD HH:MM:SS ),我想将此SQL命令仅应用于 YYYY-MM-DD 部分并基于此计算每个的发生次数。例如,如果我的数据如下:

ID|TimeStamp 
--+--------------------
00|2017-08-31 09:00:00 
01|2017-08-31 11:00:00 
02|2017-08-31 16:30:00 
03|2017-08-31 22:00:00 
04|2017-09-01 09:00:00 
05|2017-09-01 23:40:00 
06|2017-09-02 10:30:00 
07|2017-09-02 13:00:00 
08|2017-09-02 23:00:00 

然后我希望我的SQL命令输出类似

的内容
TimeStamp  | Occurrences
-----------+------------
2017-08-31 | 4 
2017-09-01 | 2 
2017-09-02 | 3 

我一直试图从目前为止到达那里,但我没有运气。

我有这个SQL:

SELECT 
    TimeStamp, COUNT(*) 
FROM 
    myTableName 
GROUP BY 
    TimeStamp
ORDER BY 
    COUNT(*) DESC      -- to sort the occurrence count

但这仅计算完全相同的时间戳,因此这不会输出我想要输出的内容。我也在想TimeStamp有DateTime类型,所以我必须先将它转换为varchar或其他东西,然后获取它的子串。

我尝试将TimeStamp数据类型转换为Varchar,然后获取字符串的前10个字母,所以

SELECT 
    COUNT(*) TimeStamp 
FROM 
    myTableName
GROUP BY 
   (SELECT LEFT(CONVERT(Varchar, TimeStamp, 120), 10))
    ORDER BY COUNT(*) DESC

但这会导致错误:

  

错误:无法在GROUP BY子句列表中用于组的表达式中使用聚合或子查询

有人可以帮我这个吗?谢谢。

1 个答案:

答案 0 :(得分:0)

SELECT CAST(TimeStamp as date), COUNT(*) 
FROM myTableName 
GROUP BY CAST(TimeStamp as date)
ORDER BY 2 DESC