我习惯了oracle,现在被抛给了T-SQL,我马上就要上一门课了,但在那之前你能帮我吗?
我有一个需要在几分钟内分组的列表。
行日期数据示例
SELECT ROWDATE,count(rowdate)
FROM [mydb].[dbo].[mytable]
GROUP BY ROWDATE
order by 1
2010-08-16 15:01:18.110 1
2010-08-16 15:01:18.203 1
2010-08-16 15:01:18.377 1
2010-08-16 15:01:18.453 1
2010-08-16 15:01:18.530 1
2010-08-16 15:01:18.610 1
2010-08-16 15:01:18.703 1
2010-08-16 15:01:18.813 1
2010-08-16 15:01:18.953 1
2010-08-16 15:01:19.173 1
2010-08-16 15:01:19.360 1
2010-08-16 15:01:19.483 1
2010-08-16 15:01:19.593 1
2010-08-16 15:01:19.673 1
2010-08-16 15:01:19.733 1
2010-08-16 15:01:19.813 1
2010-08-16 15:01:19.890 1
2010-08-16 15:01:19.970 1
2010-08-16 15:01:20.047 1我只想按分钟分组。
SELECT to_char(rowdate,'dd/MM/yyyy HH24:MI'),count(rowdate)
FROM mytable
GROUP BY to_char(rowdate,'dd/MM/yyyy HH24:MI')
order by 1在sql server(T-SQL)上,对应的脚本是什么?
发布于 2010-08-16 23:37:37
要使datetime精确到分钟级(这比使用字符串操作要好):
DATEADD(minute,DATEDIFF(minute,0,datetime),0)因此,按分钟分组,它将是:
SELECT
DATEADD(minute,DATEDIFF(minute,0,ROWDATE),0)
,count(rowdate)
FROM [mydb].[dbo].[mytable]
GROUP BY DATEADD(minute,DATEDIFF(minute,0,ROWDATE),0)
order by 1发布于 2010-08-16 23:31:52
TSQL的等价物:
TO_CHAR(rowdate,'dd/MM/yyyy HH24:MI')...is:
CONVERT(VARCHAR(16), rowdate, 20)表达式"20“返回:yyyy-mm-dd hh:mi:ss(24h) -,它是VARCHAR(19),因此将其简化为VARCHAR(16)将省略秒。
在SQL Server2005中,获取可定制格式的唯一真正的方法是使用CLR函数,因此在C#中可以使用DateTime.ToString方法...
参考资料:
发布于 2010-08-16 23:33:28
那就是
convert(varchar, rowdate, 100)格式并不完全相同,但重要的是,它也是一分钟。
编辑:
或者,您可以完全避免转换为varchar:
group by dateadd(ms, -datepart(ms, rowdate) , dateadd(s, -datepart(s, rowdate), rowdate))https://stackoverflow.com/questions/3494567
复制相似问题