从字符串优化"SELECT datetime"的最佳方法



从原始数据库中,我在varchar(字符串(中有许多COLUMNS。

那么我有这个数据库:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

CREATE TABLE `pruebas` (
`id` mediumint(8) UNSIGNED NOT NULL,
`R` varchar(18) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `pruebas` (`id`, `R`) VALUES
(1, '1603892188.033'),
(2, '1603892188.473'),
(3, '1603892188.613'),
(4, '1603892188.653'),
(5, '1603892188.688'),
(6, '1603892188.703'),
(7, '1603892188.713'),
(8, '1603892188.733'),
(9, '1603892188.753'),
(10, '1603892188.783'),
(11, '1603892188.814'),
(12, '1603892188.839'),
(13, '1603892188.855'),
(14, '1603892188.878'),
(15, '1603892188.903'),
(16, '1603892188.923'),
(17, '1603892188.953'),
(18, '1603892188.973');
ALTER TABLE `pruebas`
ADD UNIQUE KEY `id` (`id`);
ALTER TABLE `pruebas`
MODIFY `id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=107;
COMMIT;

并且我需要从每一行中恢复DATETIME(毫秒(。

我真的需要在每行使用四个函数来恢复信息日期时间(以微秒计(吗?(我有数百万行(。

我的疑问可能很迟钝:

SELECT id, CONCAT(FROM_UNIXTIME(R, '%Y-%m-%d %H:%i:%s'), '.', SUBSTRING_INDEX(R, '.', -1)) FROM pruebas

谢谢你的教训。

也许还有其他方法可以获取日期时间信息?

这个(https://www.db-fiddle.com/f/wm9iQFfbZFYZa4LLXCLFHf/2)

SELECT id, FROM_UNIXTIME(R) dt FROM pruebas

适用于任何MySQL 5.6.4及以上版本,将毫秒精度的UNIX时间戳转换为MySQLTIMESTAMP数据。

这个显示的结果是这样格式化的。

YYYY-MM-DD HH:mm:ss.ffffff

其中秒数被表示为小数位数,如48.384000。这(obvs(意味着48秒加384毫秒(根据使用.作为小数点的美国惯例(。这是一个数字。

在此格式化的时间戳中:2020-10-28 14:22:24.000000。值为24.0。也就是零分数部分。这就解释了";疯狂的";零。

DATE_FORMAT()可能能够帮助您以更具视觉吸引力的方式格式化时间戳。例如,您可能只显示小数点后的3位数字(毫秒(。

相关内容

最新更新