![](/img/trans.png)
[英]ORA-01858: a non-numeric character was found where a numeric was expected?
[英]ORA-01858: a non-numeric character was found where a numeric was expected (timestamp, decode)
我收到此錯誤ORA-01858: a non-numeric character was found where a numeric was expected
。 如果我刪除代碼中的第二行,我不會收到錯誤消息,所以我想知道問題是否與 TIME_P 變量的 DECODE 或數據類型(即時間戳)有關。
TRUNC(TIME_P) >= TO_DATE('2009-01-01', 'YYYY-MM-DD') AND
TIME_P <= DECODE('2010-01-01', NOW, SYSDATE, TO_DATE('YYYY-MM-DD'))
我可以建議這樣的東西嗎?
TIME_P >= DATE '2009-01-01' AND
TIME_P < (CASE WHEN NOW = '2010-01-01' THEN DATE '2010-01-01' ELSE SYSDATE END)
這使用日期文字, case
而不是decode()
( case
是標准 SQL)。 最初的trunc()
也是多余的。
第二行對我來說真的沒有意義。 如果您只想要不在未來的日期,那么:
TIME_P >= DATE '2009-01-01' AND
TIME_P < sysdate
或者,如果您想傳入一個參數並使用它而不是 sysdate:
TIME_P >= DATE '2009-01-01' AND
TIME_P < COALESCE(:parameter, sysdate)
這就是你所要求的,我相信:
DECODE(YOUR_FIRST_PARAMETER_HER, '2010-01-01', SYSDATE, TO_DATE(TRUNC(TIME_P), 'DD-MON-YYYY'))
正如您提到的“第一個 arg 是可選參數”,所以我輸入了“YOUR_FIRST_PARAMETER_HER”表達式只是為了提醒您,您將把它放在那里。
您的錯誤是由於您輸入的格式('YYYY-MM-DD')
而發生的,因為正確的格式是'DD-MON-YYYY'
此外,在轉換之前,您需要截斷該時間戳值......
在這里您可以看到如果您不使用正確的格式並且不使用 trunc 會出現的錯誤: https://dbfiddle.uk/?rdbms=oracle_18&fiddle=83cca74815a323bc72283adeb7396617
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.