如何在oracle数据库表中存储双冒号值

Posted

技术标签:

【中文标题】如何在oracle数据库表中存储双冒号值【英文标题】:how to store double colon values in oracle database table 【发布时间】: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”实际代表什么。它应该是一天中的某个时间吗?过去的时间?完全不同的东西? 【参考方案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 或类似的东西将其存储为文本。

【讨论】:

以上是关于如何在oracle数据库表中存储双冒号值的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库如何利用存储过程向表中添加数据?

如何将 XML 数据存储到 Oracle 表中

如何使用plsql导出oracle数据建表语句,存储过程,视图.以及表中数据

oracle 11g 中有没有办法在表中存储临时值?

如何在 Oracle 的表中查找重复值?

如何将格式化文本存储在 oracle 表中并将其加载回 json?