2015-11-16 75 views
0

我的某些列具有公司電話呼叫的持續時間值,其中持續時間以秒爲單位存儲。我希望將這些值轉換爲DD:HH:MM:SS格式,並且我打算使用MySQL的Sec_to_Time函數,該函數在用於SELECT語句時在UPDATE語句中運行良好,以便將秒值轉換爲DD: HH:MM:SS值永久。但是,我用UPDATE命令在幾個表上嘗試過,但是更新要麼將列中的值乘以(例如:19212更改爲〜32000)或截斷列。MySQL函數SEC_TO_TIME在UPDATE子句中不起作用

所以我試了下面的代碼,只是爲了看看發生了什麼。

CREATE TEMPORARY TABLE QueueTime_Snapshot (QueueTime int); 

INSERT INTO QueueTime_Snapshot (Queuetime) 
SELECT QueueTime FROM CDB_Call_and_Agent_Data; 

UPDATE QueueTime_Snapshot 
SET QueueTime = SEC_TO_TIME(QueueTime); 

SELECT QueueTime FROM QueueTime_Snapshot; 

SELECT語句返回了我已經插入臨時表的確切值;沒有什麼改變(這很奇怪,因爲其他兩個更新語句已經影響了數據的大規模改變)。當我執行

SELECT SEC_TO_TIME(QueueTime) FROM QueueTime_Snapshot; 

我收到了期望值,轉換爲我想要的格式。這個函數(或通常是函數)是不是被允許在UPDATE語句中使用,還是有其他原因值沒有按照我希望的方式被轉換?

+0

您可以分享確切的代碼,以及它在不按預期工作時使用的表格定義嗎? – JRD

+0

'UPDATE AgentSummaryTable SET total_logged_in_time = SEC_TO_TIME(total_logged_in_time)' 是我試過的代碼,失敗了。表定義如下: total_logged_in_time int(25) total_not_ready int(25) –

回答

0

有沒有理由將time數據類型值存儲爲int?看起來你正在遇到數據轉換問題。

UPDATE AgentSummaryTable SET total_logged_in_time = SEC_TO_TIME(total_logged_in_time) 

即語句轉換1點的數據類型(int,則列的數據類型)轉換成其它數據類型(時間),然後存儲回一個int。通常,您應該避免嘗試將多種數據類型存儲到一種數據類型中。

如果您打算擁有int列,則應該以秒爲單位存儲時間值,並根據需要將其轉換爲time值。否則,請將您的時間值存儲爲time列。轉換爲int的時間值05:20:12導致052012這當然不是那個時間的秒數。應該使用函數TIME_TO_SECSEC_TO_TIME將時間轉換爲秒,反之亦然。

考慮:

create table t(t int); 
insert into t values (sec_to_time(19212)); 

select sec_to_time(19212), 
     cast(sec_to_time(19212) as unsigned integer) i, 
     sec_to_time(19212) + 0 s, 
     t, 
     sec_to_time(t) 
from t; 

實際結果可能不同版本有所不同,但注意到值的差。