为什么我不能执行这个简单的插入操作?我该如何解决这个日期格式问题?
Why I can't perform this simple insert operation? How can I solve this date format issue?
我不太喜欢数据库,我在尝试实现涉及 Oracle 数据库上的 date 字段的简单插入查询时遇到以下问题。
所以我有一个名为 FLUSSO_XMLSDI 的 table,它具有以下结构(这是 select * 的结果):
NUMERO_FATTURA DATA_EMISSIONE XML
-----------------------------------------------------------
2502064160 11-GEN-2014 some text
2502064161 15-GEN-2014 some text
2502064162 25-GEN-2014 some text
其中 DATA_EMISSIONE 字段是 DATE 类型。
现在,我必须使用 XML 提取的值插入一条新记录,我会这样做:
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, 2015-06-16, 'TEST');
但是我在 DATA_EMISSIONE 字段中遇到了一些问题,因为我在尝试执行上一个查询时收到以下错误消息:
Errore con inizio alla riga 3 nel comando:
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, 2015-06-16, 'TEST')
Errore alla riga del comando:4 Colonna:27
Report errori:
Errore SQL: ORA-00932: inconsistent datatypes: expected DATE got NUMBER
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
正如您在从 select 操作获得的数据中看到的那样,DATA_EMISSIONE 字段包含以下格式的日期:11 -GEN-2014 但我试图将其作为 2015-06-16 插入(因为这是我的应用程序从 XML 获取此值的方式)
是这个问题吗? Oracle 不会自动执行某种不同数据格式之间的自动转换吗?我怎样才能解决这个问题并正确执行我的插入语句?
2015-06-16
确实是一个数字。具体来说就是1993
(2015-6-16)。
您需要做的是...
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, date'2015-06-16', 'TEST');
... 如果您想使用日期文字常量,或者(更有可能,因为您从其他地方的 XML 获取此数据)...
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, to_date('2015-06-16', 'yyyy-mm-dd'), 'TEST');
...如果您想使用字符串值,可能来自绑定变量。
您可以使用TO_DATE
Oracle 函数进行数据转换,像这样
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, TO_DATE('2015-06-16', 'yyyy-mm-dd'), 'TEST');
您可以找到有关此功能的更多信息here
我不太喜欢数据库,我在尝试实现涉及 Oracle 数据库上的 date 字段的简单插入查询时遇到以下问题。
所以我有一个名为 FLUSSO_XMLSDI 的 table,它具有以下结构(这是 select * 的结果):
NUMERO_FATTURA DATA_EMISSIONE XML
-----------------------------------------------------------
2502064160 11-GEN-2014 some text
2502064161 15-GEN-2014 some text
2502064162 25-GEN-2014 some text
其中 DATA_EMISSIONE 字段是 DATE 类型。
现在,我必须使用 XML 提取的值插入一条新记录,我会这样做:
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, 2015-06-16, 'TEST');
但是我在 DATA_EMISSIONE 字段中遇到了一些问题,因为我在尝试执行上一个查询时收到以下错误消息:
Errore con inizio alla riga 3 nel comando:
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, 2015-06-16, 'TEST')
Errore alla riga del comando:4 Colonna:27
Report errori:
Errore SQL: ORA-00932: inconsistent datatypes: expected DATE got NUMBER
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
正如您在从 select 操作获得的数据中看到的那样,DATA_EMISSIONE 字段包含以下格式的日期:11 -GEN-2014 但我试图将其作为 2015-06-16 插入(因为这是我的应用程序从 XML 获取此值的方式)
是这个问题吗? Oracle 不会自动执行某种不同数据格式之间的自动转换吗?我怎样才能解决这个问题并正确执行我的插入语句?
2015-06-16
确实是一个数字。具体来说就是1993
(2015-6-16)。
您需要做的是...
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, date'2015-06-16', 'TEST');
... 如果您想使用日期文字常量,或者(更有可能,因为您从其他地方的 XML 获取此数据)...
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, to_date('2015-06-16', 'yyyy-mm-dd'), 'TEST');
...如果您想使用字符串值,可能来自绑定变量。
您可以使用TO_DATE
Oracle 函数进行数据转换,像这样
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, TO_DATE('2015-06-16', 'yyyy-mm-dd'), 'TEST');
您可以找到有关此功能的更多信息here