出于性能和简单性的原因,我想以秒的形式获取 MySQL 3.x 服务器中 DATETIME 列的内容(或者实际上任何数字类型 - 我只是想在使用 UNIX_TIMESTAMP() 时避免所有明显的时区问题 [the我表中的日期确实来自不同的区域设置,所以我不想对我背后是否发生了一些时区补偿怪异现象有任何疑问])。
TO_SECONDS() 函数看起来很理想,直到我发现它只适用于较新的 MySQL 安装(无法升级)...
我想过做这样的事情:
SELECT (TO_DAYS(Timestamp)-730486)*86400+TIME_TO_SEC(Timestamp)
手动计算自 2000 年 1 月 1 日以来经过的秒数。但似乎它可能会通过强制服务器创建临时表或其他东西来给服务器带来不必要的负载?
我也可以这样做:
SELECT TO_DAYS(Timestamp), TIME_TO_SEC(Timestamp)
并自己组合结果,但这使得代码端变得不那么简单。
最好的妥协是什么?我将在每个查询中获取大量行(大约 10^6),因此客户端和服务器端性能并非完全不重要。
Thanks,.
(经过编辑以减少混乱)
首先,为了确保新字段将是BIGINT
... 正确的?
您可以使用显式强制转换来防止溢出吗?
SELECT CAST(TO_DAYS(Timestamp)*86400 + TIME_TO_SEC(Timestamp) AS UNSIGNED INTEGER)
或者也许在填充新的之前使用中间字符串BIGINT
field?
SELECT CAST(TO_DAYS(Timestamp)*86400 + TIME_TO_SEC(Timestamp) AS UNSIGNED CHAR(11))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)