2011-08-09 47 views
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:「可以」:無效的標識符 誰能幫我這個請。謝謝ORA-00904:「可以」:無效的標識符

+1

爲什麼在where子句中使用to_char時,名爲TRANSACTION_DATE的字段應該是DATE類型,而不是CHAR/VARCHAR – Mark

回答

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

把它放在引號中,否則它被作爲標識符而不是文字描述。

+0

,這會給出無效數字! –

5

您需要在2006年5月2日前添加引號,否則看起來像是一個算術表達式。

6

如果TRANSACTION_DATE是一個日期(我衷心希望它是),您需要使用TO_DATE將字符串轉換爲DATE。而且因爲它是一個字符串,所以需要用引號括起來,因爲這就是我們用文字做的事情。

哦,另一件事是,掩碼需要匹配字符串中使用的格式來表示日期。

因此,該行應爲:

TRANSACTION_DATE = to_date('02-MAY-2006', 'dd-mon-yyyy') 
+0

注意:您並不總是需要將掩碼與格式相匹配。 –

2

,如果你必須使用一個字符串

要重新格式化您必須先將其轉換爲一個日期,然後到你的願望如格式:

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

只是試圖重新格式化爲DD/MM/YYYY將無法正常工作

0

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