如何解决在SQL oracle中的情况
我是sql oracle的新手,在这里使用大小写时遇到问题,例如,是这样:
-
如果transaction_type为RECEIVE,则为收货日期-承诺日期
-
如果收货日期>承诺日期,则为收货日期-承诺日期
-
如果收货日期
-
如果尚未收到或transaction_type DELIVER,则为sysdate-承诺日期
CASE WHEN transaction_type ='RECEIVE' THEN to_char(creation_date,'DD-MON-YYYY') – to_char(promised_date,'DD-MON-YYYY') WHEN to_char(creation_date,'DD-MON-YYYY') > to_char(promised_date,'DD-MON-YYYY') THEN to_char(creation_date,'DD-MON-YYYY') <= to_char(promised_date,'DD-MON-YYYY') THEN null WHEN transaction_type ='DELIVER' THEN to_char(sysdate,'DD-MON-YYYY') - to_char(promised_date,'DD-MON-YYYY') END AS delay_day
ORA-00911:无效字符00911。00000-“无效字符” *原因:标识符名称以非ASCII字符开头 字母或数字。标识符的第一个字符之后 名称,允许使用ASCII字符,包括“ $”,“#”和“ _”。 用双引号引起来的标识符可以包含任何 除双引号外的字符。替代报价 标记(q'#...#')不能将空格,制表符或回车符用作 定界符。对于所有其他上下文,请查阅SQL语言。 参考手册。 *操作:检查Oracle标识符命名约定。如果你是 尝试在的IDENTIFIED BY子句中提供密码 一个CREATE USER或ALTER USER语句,那么建议 始终将密码用双引号引起来,因为 然后允许使用除双引号以外的字符。 第21行错误:94列
这是错误,我不知道这是怎么回事
解决方法
看起来像您从某些 fancy 文本编辑器(也许是MS Word,是复制/粘贴代码)(使用 fancy 字符将单引号和双引号以及减的迹象。如果转换为减去“ -
”的“正常”,则应该可以:
CASE
WHEN transaction_type = 'RECEIVE'
THEN
TO_CHAR (creation_date,'DD-MON-YYYY')
- TO_CHAR (promised_date,'DD-MON-YYYY') --> this minus
WHEN TO_CHAR (creation_date,'DD-MON-YYYY') >
TO_CHAR (promised_date,'DD-MON-YYYY')
THEN
TO_CHAR (creation_date,'DD-MON-YYYY') --> and this minus
WHEN TO_CHAR (creation_date,'DD-MON-YYYY') <=
TO_CHAR (promised_date,'DD-MON-YYYY')
THEN
NULL
WHEN transaction_type = 'DELIVER'
THEN
TO_CHAR (SYSDATE,'DD-MON-YYYY')
END AS delay_day
但是:结果是您期望得到什么?减去两个字符串是荒谬的。什么是'A' - '23FX__#'
?如果您想减去日期,请确保-为什么不这样做-结果将是这两个日期之间的天数。
此外,在大多数情况下,比较字符串也不起作用。
这意味着您应该-也许-完全删除TO_CHAR。
CASE
WHEN transaction_type = 'RECEIVE'
THEN
creation_date - promised_date
WHEN creation_date > promised_date
THEN
creation_date - promised_date
WHEN creation_date <= promised_date
THEN
NULL
WHEN transation_type = 'DELIVER'
THEN
SYSDATE - promised_date
END AS delay_day
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。