gpt4 book ai didi

MySQL 函数 SEC_TO_TIME 在 UPDATE 子句中不起作用

转载 作者:行者123 更新时间:2023-11-29 21:49:58 28 4
gpt4 key购买 nike

我的一些列包含公司电话通话的持续时间值,其中持续时间以秒为单位存储。我想将这些值转换为 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 语句中使用,或者还有其他原因导致这些值没有按照我希望的方式进行转换吗?

最佳答案

time 数据类型值存储为 int 是否有原因?您似乎遇到了数据转换问题。

UPDATE AgentSummaryTable SET total_logged_in_time = SEC_TO_TIME(total_logged_in_time)

该语句将一种数据类型(int,列的数据类型)转换为另一种数据类型(时间),然后存储回 int。一般来说,您应该避免尝试将多种数据类型存储到一种数据类型中。

如果您计划使用 int 列,则应存储以秒为单位的时间值,并根据需要转换为 time 值。否则,将时间值存储为 time 列。时间值 05:20:12 转换为 int 会得到 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;

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

关于MySQL 函数 SEC_TO_TIME 在 UPDATE 子句中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745089/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com