ORA-00904:"MAY":无效标识符。

3
INSERT INTO FCR.TRANSACTION (   
TRX_UNIT,    
TRX_DATE,    
TRX_USR,    
TRX_USR_SN,    
TRANSACTION_CODE,    
PRODUCT_CODE,    
CURRENCY_SHORT_DESCRIPTION,    
AMOUNT_FC,    
EXCHANGE_RATE,    
AMOUNT_DC) 
SELECT    
SOURCE_SYSTEM_CHANNEL_CODE,    
to_char(TRANSACTION_DATE, 'dd/mm/yyyy'),    
USER_CODE,    
USER_TRANSACTION_SERIAL_NUMBER,    
TRANSACTION_CODE,    
PROFITS_PRODUCT_CODE,    
SHORT_DESCRIPTION,    
SOURCE_AMOUNT_FC,    
SOURCE_EXCHANGE_RATE,    
SOURCE_AMOUNT_EUR 
FROM    
FCR_TRANSACTION 
WHERE    
TRANSACTION_DATE = to_char(02-MAY-2006, 'dd/mm/yyyy')

我输入的查询语句是在ORACLE中,但是它给了我一个错误提示:ORA-00904:“MAY”:无效标识符。请问有谁能帮我解决这个问题吗?谢谢。

1
为什么你在where子句中使用to_char函数,一个名为TRANSACTION_DATE的字段应该是日期类型而不是字符/字符串类型。 - mmmmmm
5个回答

6
如果 TRANSACTION_DATE 是一个日期(我真诚地希望它是),那么您需要使用 TO_DATE 将字符串转换为日期。因为它是一个字符串,所以需要用引号括起来,因为这就是我们对文字的处理方式。
哦,还有一件事情,掩码需要匹配用于表示日期的字符串格式。
因此,该行应该是:
TO_DATE('TRANSACTION_DATE', '日期格式掩码')
TRANSACTION_DATE = to_date('02-MAY-2006', 'dd-mon-yyyy')

请将以下与编程有关的内容从英语翻译成中文。仅返回翻译后的文本:注意:您不必总是将掩码与格式匹配。 - Kevin Burton

5

你需要在 02-MAY-2006 周围添加引号,否则它看起来像一个算术表达式。


4
TRANSACTION_DATE = to_char('02-MAY-2006', 'dd/mm/yyyy')

加上引号,否则它会被解释为标识符而不是文字字面值。


那会给出一个无效的数字! - Kevin Burton

2

如果必须使用字符串

要重新格式化,您必须先将其转换为日期,然后再按所需格式进行转换,例如:

TRANSACTION_DATE = TO_CHAR(TO_DATE('02-MAY-2006'),'dd/mm/yyyy')

仅仅尝试将其格式化为dd/mm/yyyy是行不通的。


1

使用WHERE TRANSACTION_DATE = to_date('02-MAY-2006', 'dd-MON-yyyy')代替WHERE TRANSACTION_DATE = to_char(02-MAY-2006, 'dd/mm/yyyy')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接