我的一些列具有公司电话的持续时间值,其中持续时间以秒为单位存储。我想将这些值转换为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语句中使用此函数(或一般函数),还是有其他原因导致值不按我希望的方式转换?
答案 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_SEC
和SEC_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;
实际结果可能因版本而异,但请注意值的差异。