【问题标题】:SQL Convert Int to TimeSQL 将 Int 转换为时间
【发布时间】:2011-06-02 06:38:02
【问题描述】:

我正在尝试将数据从文本文件导入 SQL 数据库。该文件不使用 TAB 来分隔字段。我在导入时遇到的问题是,当我编写作为 Int 给出的时间时,它在导入时完全搞砸了。

部分文本文件:

北费利克斯 2011-07-01 0422 0.47 0012 0.69 2109 0.55 1311 1.44 北费利克斯 2011-07-02 0459 0.43 0048 0.72 2140 0.55 1342 1.47 北费利克斯 2011-07-03 0533 0.41 0123 0.75 2213 0.57 1412 1.46 北费利克斯 2011-07-04 0605 0.41 0158 0.79 2244 0.59 1441 1.41

我的查询结果:

INSERT INTO `dbc`.`history_long` (`Region`,`Location`,`Date`,`LT1-time`,`LT1-height`,`HT1-time`,`HT1-height`,`LT2-time`,`LT2-height`,`HT2-time`,`HT2-height`) 
values ('North','Felix','2011:00:00','422:00:00','0.47','12:00:00','0.69','2109:00:00','0.55','1311:00:00','1.44'),
('North','Felix','2011:00:00','459:00:00','0.43','48:00:00','0.72','2140:00:00','0.55','1342:00:00','1.47'),
('North','Felix','2011:00:00','533:00:00','0.41','123:00:00','0.75','2213:00:00','0.57','1412:00:00','1.46'),
('North','Felix','2011:00:00','605:00:00','0.41','158:00:00','0.79','2244:00:00','0.59','1441:00:00','1.41'),

问题是例如 L2-time 在时间列中变为 2109:00:00。有没有办法将它从 Int 转换为 Time?

【问题讨论】:

  • 这不可能接近您的真实查询,除非您使用的是我见过的最有效的 SQL 实现。在插入语句的列列表中,列名由逗号分隔,并且单独的列值通常作为单独的参数和/或文字提供(同样,由逗号分隔)。那么您使用的是什么 SQL 产品?
  • ...并提供带有真实日期的真实代码
  • 抱歉,希望这样会更好。现在看一下,您可以看到我正在读取的数据,顶部的 4 行。我现在正在将它导入到 Navicat,这就是我要完成的查询结果。我也手动编写了一个查询,类似于 Navicat 生成的查询,但仅使用完整的 INT 而不使用 : 来分隔小时:分钟:秒,并且数据库不会接受它,因为它的时间列设置为使用时间,所以它只是搞砸了。源(文本文件)中有大约 160,000 行数据,所有 TAB 分隔,时间均以 4 位 24 小时 INT 形式给出。

标签: sql time int


【解决方案1】:

以下是如何将 int(如 0422)转换为 time 值的方法:

SELECT CAST('00:00' AS time)
     + INTERVAL (@IntValue DIV 60) HOUR
     + INTERVAL (@IntValue % 60) MINUTE

没有看到您的导入查询,就不可能说出您如何实际应用它。

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 2019-03-07
    • 2018-01-02
    • 1970-01-01
    • 2010-12-27
    • 2019-07-01
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多