【问题标题】:how to store double colon values in oracle database table如何在oracle数据库表中存储双冒号值
【发布时间】:2021-11-01 21:50:24
【问题描述】:

我有 excel 我正在尝试将其导入 oracle 数据库表中。

excel 中的某些值由例如14:39.5 和双冒号组成。我应该在 oracle 数据库表中提供什么数据类型来存储这个值?

目前已给出varchar 数据类型,并在导入时抛出错误:

Conversion error! Value: "00:12:01.615518000" to data type: "Number". Row ignored! Value is '00:12:01.615518000'. Cannot be converted to a decimal number object. Valid format: 'Unformatted'

【问题讨论】:

  • 您说“当前已给出 varchar 数据类型”,但错误提示您将其声明为 NUMBER。那么它是哪一个?我建议您首先更新您的问题以显示表格的 DDL。并准确解释“14:39.5”实际代表什么。它应该是一天中的某个时间吗?过去的时间?完全不同的东西?

标签: excel oracle sqldatatypes varchar2


【解决方案1】:

您可以将其存储为INTERVAL DAY(0) TO SECOND(9) 数据类型:

CREATE TABLE table_name (
  time INTERVAL DAY(0) TO SECOND(9)
);

然后您可以使用TO_DSINTERVAL 传递您的值,并在开头添加'0 '

INSERT INTO table_name (time)
VALUES ( TO_DSINTERVAL('0 ' || '00:12:01.615518000') );

db小提琴here

【讨论】:

    【解决方案2】:

    如果它是日期/时间戳的一部分,那么您可以将其存储为DATETIMESTAMP(如果您可以添加日期组件)。 Oracle 不仅有 TIME 数据类型。

    如果您无法向其中添加日期组件,那么假设它是一个时间间隔,您可以将其转换为秒或微秒(去掉冒号)并将其存储为 NUMBER

    如果您想保持显示的准确格式,您唯一的选择是使用 VARCHAR2 或类似的东西将其存储为文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 2016-06-22
      • 1970-01-01
      • 2018-03-07
      • 2015-01-19
      • 1970-01-01
      • 2019-09-07
      相关资源
      最近更新 更多