[英]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.