2015-12-02 152 views
-1

我有一個SQL查詢將我的數據庫中的日期/時間戳列從UNIX時間戳轉換爲可讀格式。這給了我一個很好的可讀格式,但我想刪除實際的時間戳,並只保留日期..因爲我試圖計數和分組的所有日期只。轉換Unix時間戳iinto YYYYMMDD

SELECT DATEADD(ss,msg.timestamp/1000,'01/01/1970')As DateTime 
FROM dbo.cp_messages msg 

結果目前看起來是這樣的:

2005-10-26 11:12:36.000 

但我想:

2005-10-26 

如何退出的時間。

評論有幫助,但我如何搜索日期之間現在我已經將unix時間轉換爲正確的格式..我已經嘗試了下面,但每次都得到錯誤。

SELECT COUNT(msg.messageId) 
,CONVERT(VARCHAR(10), DATEADD(ss, msg.[timestamp]/1000, '01/01/1970'), 120) 
FROM dbo.cp_messages msg 
WHERE timestamp >= DATEADD(DAY, -2, GETDATE()) 
GROUP BY timestamp 

我似乎與每個實例的計數結束了,但我後是這一天的總計數..

1 2015-10-29 
1 2015-10-29 
1 2015-10-29 

當我想

3 2015-10-29 

不知道如何得到期望的結果

+1

的[?我如何轉換BIGINT(UNIX時間戳),在SQL Server日期時間]可能的複製(http://stackoverflow.com/questions/2904256/how-can-i-convert-bigint-unix -timestamp-datetime-in-sql-server) – Ben

+0

除了答案之外,如果未在YYYY-MM-DD格式中指定,請注意日期格式,因爲10-01-1970可以是10月1日或10月1日!在導入數據之前,請檢查SET DATEFORMAT DMY以強制使用日期格式。 –

回答

2
SELECT CONVERT(VARCHAR(10), DATEADD(ss, msg.[timestamp]/1000, '01/01/1970'), 120) 
FROM dbo.cp_messages msg 
+0

Brillant時,我最終得到一個錯誤,那就是我想要的。你能解釋一下(varchar(10)和120在最後。 – Boardman411

2

要只顯示日期,你可以使用這個:

select convert(nvarchar(10), [DateTime], 120) 

Alternativly,返回一天的開始,你可以用疑問的

select dateadd(day, datediff(day, 0, [DateTime]) - 10, 0)) 
+0

現在我已經將mydate轉換爲正確的格式,我如何查找幾天前的所有記錄。當我比較 – Boardman411

0

第二部分:

由於您仍然在基礎日期上進行分組,因此它將爲每個3行分配一行。因此,您可以獲得具有不同基礎時間的每個日期的組。但是,您只顯示當天的第一部分,這就是爲什麼你看不到這一點。

相反,在當天的啓動組:

SELECT COUNT(msg.messageId) as messageId 
     ,CONVERT(VARCHAR(10), dateadd(day, datediff(day, 0, timestamp), 0), 120) as timestamp 
FROM dbo.cp_messages msg 
WHERE timestamp >= DATEADD(DAY, -2, GETDATE()) 
GROUP BY dateadd(day, datediff(day, 0, timestamp), 0) 
+0

似乎不適合我...什麼是(-10,0)在行尾做了什麼,我得到一個錯誤,關於msg.timestamp在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY函數中。如果我添加了msg。messageID,然後我得到一個算術o/f – Boardman411

+0

嗯,不完全確定-10從哪裏來,已經刪除它。還更新了選擇以希望刪除該錯誤。很抱歉 - 無法對其進行測試,因爲您尚未提供任何用於測試的示例數據! – BeanFrog

+0

將表達式轉換爲數據類型的算術溢出錯誤datetime - 列中的數據只是messageId的ID(數字)和時間的Unix時間戳。 – Boardman411