2010-08-16 96 views
1

我習慣於oracle,現在已經拋出了T-SQL,我正在做一個課程,但你可以幫忙,直到那時。什麼是to-char相當於tsql/sql server 2008

我有一個列表,我需要在幾分鐘內分組。

rowdate數據樣本

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 

我只想GROUP BY分鐘。

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)什麼是等效腳本?

回答

2

到地板上的日期時間到分鐘使用(這是比使用字符串操作更好):

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 
+0

你忘了毫秒部分。 – GSerg 2010-08-16 15:52:14

+0

@GSerg,我不確定你在說什麼?我將日期時間設置爲分鐘的方式是普遍接受的禁用方法,請參閱:[在SQL Server中放置日期](http://stackoverflow.com/questions/85373/floor-a-date-in-sql-server ) – 2010-08-16 17:47:03

+0

我的不好。我誤解了你的代碼。 – GSerg 2010-08-16 18:10:52

0

是否有一個特定的原因,你想轉換爲(var)char?

datepart(minute, rowdate) 

這隻返回一個數字:日期時間字段的分鐘部分。很容易分組。

否則使用CONVERT()或CAST()在字符類型之間進行轉換。您還需要確保使用正確的格式。有一點點關於這裏:http://www.mssqltips.com/tip.asp?tip=1145

+1

這將在不同的時間將同一分鐘聚集在一起,這不是OP想要的東西。我認爲'CONVERT(VARCHAR(20),GETDATE(),100)'可能會這樣做。 – 2010-08-16 15:29:46

+0

@馬丁史密斯:幾乎,但「100」給h12時間:mi,而不是h24:mi – 2010-08-16 15:38:17

+0

@OMG - 但作爲一個分組因素,它仍然應該是相同的(它會返回「2010年8月16日4:39 PM」 AM和PM在一起) – 2010-08-16 15:39:29

4

的TSQL相當於:

TO_CHAR(rowdate,'dd/MM/yyyy HH24:MI') 

...是:

CONVERT(VARCHAR(16), rowdate, 20) 

表達 「20」 的回報:yyyy-mm-dd hh:mi:ss(24h) - 這是VARCHAR (19),所以將其降至VARCHAR(16)省略秒。

DATETIME格式是TSQL一個真正的痛苦 - 在SQL Server 2005中,唯一真正的方法來獲得定製的格式是使用CLR函數,以便在C#中,你可以使用DateTime.ToString方法...

參考:

3

這會是

convert(varchar, rowdate, 100) 

格式不完全一樣,但重要的是,它也是一分鐘。


編輯:

或者,你能避免轉換在將所有varchar:

group by dateadd(ms, -datepart(ms, rowdate) , dateadd(s, -datepart(s, rowdate), rowdate)) 
+0

這給h12時間:mi,而不是h24:mi – 2010-08-16 15:36:15

+0

正確。我認爲這並不完全相關,因爲你仍然可以通過它進行分組,這是我能想到的最簡單的事情。顯然還有其他解決方案。 – GSerg 2010-08-16 15:39:05

+0

未定義VARCHAR長度也很危險 - 通常,如果定義了長度,SQL Server將只分配一個字符。但是,當我在SQL Server 2005上測試時,這不是問題 – 2010-08-16 15:43:05

相關問題