MySQL函数SEC_TO_TIME在UPDATE子句

时间:2015-11-16 21:35:05

标签: mysql

我的一些列具有公司电话的持续时间值,其中持续时间以秒为单位存储。我想将这些值转换为DD:HH:MM:SS格式,我打算使用MySQL的Sec_to_Time函数,该函数在SELECT语句中使用时效果很好UPDATE语句,以便将秒值永久转换为DD:HH:MM:SS值。

但是,我在带有UPDATE命令的几个表上尝试了它,但更新要么乘以列中的值(例如:19212更改为~32000),要么截断列。

所以我尝试了以下代码,只是为了看看发生了什么。

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语句中使用此函数(或一般函数),还是有其他原因导致值不按我希望的方式转换?

1 个答案:

答案 0 :(得分: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;

实际结果可能因版本而异,但请注意值的差异。