2016-06-07 95 views
-1

任何帮助球员我有错误列不允许在这里为日期时间!插入声明错误,ORA-00984:列不允许在这里

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE, 
    FROM_DATE, 
    TO_DATE, 
    ADDED_PERIOD_IN_MONTHS, 
    MEMBER_AMOUNT, 
    THE_CURRENCY, 
    MATURITY_DATE 
) VALUES (
    4, 
    convert(datetime, '6/1/2016 12:00:00 AM', 5), 
    convert(datetime, '6/1/2016 12:00:00 AM', 5), 
    0, 
    2500, 
    'OMR', 
    convert(datetime, '6/30/2016 12:00:00 AM', 5) 
); 
+0

你想用'CONVERT'做什么?在oracle中,它用于将字符串从一个字符集转换为另一个字符集。 – Noel

+0

我想插入完整格式的日期dd/mm/yyyy ss:mm:hh – ghalib

+1

查看to_date函数 – evilive

回答

2

您要使用Oracle中的SQL Server CONVERT() function - 的Oracle CONVERT() function转换从一个字符集到另一个,你想要什么没有做。

相反,你可以使用文字日期:

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE, 
    FROM_DATE, 
    TO_DATE, 
    ADDED_PERIOD_IN_MONTHS, 
    MEMBER_AMOUNT, 
    THE_CURRENCY, 
    MATURITY_DATE 
) VALUES (
    4, 
    DATE '2016-06-01', 
    DATE '2016-06-01', 
    0, 
    2500, 
    'OMR', 
    DATE '2016-06-30' 
); 

在Oracle中,所有DATE类型既有日期和时间组成部分 - 日期文字语法将刚刚成立的时候组件00:00:00(或12:00:00 AM在一个12小时的时钟)。

或者,如果你想指定的时间成分,那么你可以使用时间戳文字(甲骨文将隐式转换为DATE类型如果是这样的列的你在其存储类型):

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE, 
    FROM_DATE, 
    TO_DATE, 
    ADDED_PERIOD_IN_MONTHS, 
    MEMBER_AMOUNT, 
    THE_CURRENCY, 
    MATURITY_DATE 
) VALUES (
    4, 
    TIMESTAMP '2016-06-01 00:00:00', 
    TIMESTAMP '2016-06-01 00:00:00', 
    0, 
    2500, 
    'OMR', 
    TIMESTAMP '2016-06-30 00:00:00' 
); 

或者你可以使用TO_DATE()功能显式转换一个字符串到日期:

INSERT INTO MEMBERS_CONTRIBUTIONS (
    CONTRIBUTION_TYPE, 
    FROM_DATE, 
    TO_DATE, 
    ADDED_PERIOD_IN_MONTHS, 
    MEMBER_AMOUNT, 
    THE_CURRENCY, 
    MATURITY_DATE 
) VALUES (
    4, 
    TO_DATE('6/1/2016 12:00:00 AM', 'MM/DD/YYYY HH12:MI:SS AM'), 
    TO_DATE('6/1/2016 12:00:00 AM', 'MM/DD/YYYY HH12:MI:SS AM'), 
    0, 
    2500, 
    'OMR', 
    TO_DATE('6/30/2016 12:00:00 AM', 'MM/DD/YYYY HH12:MI:SS AM') 
); 
0

表达convert(datetime, '6/1/2016 12:00:00 AM', 5)呼吁名为datetime列。但是,您的插入语句根本不提供涉及任何列的上下文,因此查询解析器无法对datetime做任何意义。因此你的ORA-00948错误。

我想你想把一个日期/时间常数,从你的例子可能意味着2016年6月1日或2016年1月6日,到date数据类型。您需要使用TO_DATE()函数将字符串转换为该格式。我不打算建议一个特定的调用形式,因为我不知道你的字符串是如何格式化的。

相关问题