使用[hh]:mm:ss将Excel电子表格导入Access - 格式问题

时间:2013-08-18 15:08:51

标签: sql excel ms-access

我需要将Excel电子表格导入Microsoft Access。我有一个格式为[h]:mm:ss的列。当我使用Access导入它时,我已将该列指定为日期/时间格式,但显示不正确。

例如在Excel中它将显示452:32:00但在Access中它将显示18/01/1900 20:32:00。我需要在Access中编写一个查询,以与Excel中显示的格式相同的方式显示它。

如果有人能告诉我这样做的SQL,我会很感激。感谢

1 个答案:

答案 0 :(得分:1)

更新1:一种存储持续时间的新方法 - 以秒为单位存储所有内容,而不是三小时,分钟和秒的三个单独列。访问“double类型允许我们按照地质年龄的比例存储持续时间。

步骤:

  1. 将电子表格导入持续时间的访问表 - 例如tblDurations
  2. 对持续时间执行算术运算,例如添加(相应的列)两行,多行一行2,总和所有行等等。
  3. 格式化并显示输出。
  4. 下面,我将主要使用Access的ANSI-92 SQL语法,该语法通过DAO CurrentProject.Connection.Execute方法工作。您必须在此处使用DAO以获得最佳结果,而不是使用Access GUI查询编辑器。如果您需要澄清,请告诉我。

    导入电子表格

    创建表

    create table tblDurations (
      ID autoincrement primary key
    , durSeconds double not null
    )
    

    导入持续时间

    我想从简单的CSV文件导入数据。我会在这里向你展示这种方法。假设您在Excel中看起来像这样的CSV文件durations.csv

    Duration
    01:59:59
    02:01:57
    00:00:04
    

    您可以运行以下命令进行导入:

    insert into tblDurations (durSeconds)
    select
      hour(Duration) * 60 * 60
    + minute(Duration) * 60
    + second(Duration)
    from [Text;FMT=CSVDelimited;HDR=Yes;DATABASE=C:\Users\YourName\Documents;].[durations.csv]
    

    请注意,在上面的最后一行中,您可以替换自己的文件路径和名称。

    持续时间算法

    现在您可以切换到Access的GUI SQL编辑器。假设我们想要将某个持续时间乘以2.5:

    select
      2.5 as multiplier
    , multiplier * durSeconds as s
    from tblDurations
    where ID = 1
    

    格式和显示输出

    这里的技巧是将以秒为单位的持续时间转换为小时,分钟和秒:

    select
      int(sq.s / (60 * 60)) as Hours
    , int((sq.s - Hours * 60 * 60) / 60) as Minutes
    , sq.s - Hours * 60 * 60 - Minutes * 60 as Seconds
    from (
      select
        2.5 as multiplier
      , multiplier * durSeconds as s
      from tblDurations
      where ID = 1
    ) as sq
    

    最后,您将输出小时,分钟和秒格式设置为hh:mm:ss,我将其作为练习留给读者。