【问题标题】:Preserve leading zeros when importing Excel into SQL将 Excel 导入 SQL 时保留前导零
【发布时间】:2014-02-14 15:09:23
【问题描述】:

我的办公室使用 excel 来准备我们的数据,然后再将其导入 SQL 数据库。但是,我们一直遇到以下错误。

从一台计算机导入数据时,它会丢失所有前导零。但是,当它从另一台计算机导入时,它会完美导入。

前导零的一个例子是,我们的项目编号需要格式化为“001, 002, 003,... 010, 011, 012,... 100, 101, 102, ect”。

1) excel 文件存储在服务器上,因此文件没有区别。 2)如果用户交换工作站,结果留在计算机上,不随用户切换。 3) 数据被格式化为文本。它已从“数据”选项卡和“格式单元格”中格式化为文本。

excel 中是否有特定于计算机而不是电子表格的设置会影响数据的导出?或者是否有一个非 excel 特定的设置会导致这种情况?

【问题讨论】:

  • 如何将数据导入数据库?请显示一些代码或相关内容。
  • 什么版本的sql-server?

标签: sql sql-server excel application-settings


【解决方案1】:

不确定在将数据插入数据库之前填充数据有什么好处......(占用更多空间,搜索速度变慢等)。听起来您正在将其格式化以输出 (?),这可能在其他地方更有效。

但无论如何——这里有一些关于您的 SELECT (sql) 语句的想法:

RIGHT(1000 + [excel field], 3)

或者另一个是

REPLICATE('0', 3 - LEN([excel field])) + [excel field]

您可以对 Excel 字段本身(在导入之前)执行的操作是在其前面加上 '(撇号)作为前缀。请注意,如果您在 Excel 中输入 0007,它会将其更改为 7,但如果您输入 '0007,它将保留前导零。

【讨论】:

  • 绝对!撇号作为在文本字段中保留零的前缀是另一个很好的解决方法。
【解决方案2】:

根据您需要的前导零的数量,您可以在 Excel 中选择您的数据/列,进入 Excel >> 格式 >> 自定义 >> 在类型字段中输入所需的任意数量的零(即 000000000前导零的 9 位数字),它会自动以正确数量的前导零开头,以使数字字符串具有正确的长度(即 4000 = 00004000)。

请注意,这仅适用于数字数据,而不适用于文本,但根据具体情况,以数字格式保留数据可能更有用 - 您给出的示例仅列出了数字数据,并且通常保留数字格式是利于分析。

【讨论】:

  • 这里要小心,Excel 格式只会影响数字的显示方式。单元格的实际内容(通常是读取的内容)仍然是“1”而不是“001”。
  • 没错,我们需要等待请求方澄清在分析过程中的哪个点使用 Excel 文件。我的假设是 Excel 是最终产品,因为很少有组织会使用 Excel 来输入数据库应用程序或诸如此类的东西(我可能错了,你知道他们对假设的看法......)
【解决方案3】:

最好避免使用“TEXT”格式选项。令人困惑的是,它不会强制单元格的内容为文本数据类型,并且当公式引用“TEXT”格式时会造成严重破坏。

要添加到上一个答案(以及关于这是否是一个好主意的所有警告),您可以使用TEXT worksheet function

=TEXT(A1,"000")

如果需要,保证一个带有前导零的实际文本字符串。

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2021-08-25
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多