0
我写了一个简单的查询来比较日期,但我在查询的最后一行收到无效的标识符错误。我在下面得到以下错误。第15行恰好是查询的最后一行。Oracle SQL Select
行错误:15列:6
Select OP_DATE,
ID,
TO_CHAR(DT.OP_DATES.LST_UPDT_TMSP,'DD-MM-YY') as SD
From DT.OP_DATES
Where OP_DATE_IND = 'CMPLTD'
And OP_DATE_STS = 'M'
And SD=(SELECT TO_CHAR(SYSDATE, 'DD-MM-YY') FROM DUAL)
有什么不对的标识?
@BreenDeen-进一步解释Aleksej的答案:它总是帮助思考一个SQL语句中的子句的评估顺序。至少原则上,FROM子句(包括JOIN条件)和WHERE子句在其他任何事情之前被评估,而SELECT子句被评估接近结束。 SELECT子句中定义的别名对WHERE子句不可见。数据库软件的创建者可以自由地做其他事情(比如稍后定义的任何别名的“预读”),但我不知道是否有这样做的具体操作,当然Oracle不。 – mathguy
@BreenDeen - 作为使用子查询的替代方法,您可以在WHERE子句的左侧重复整个TO_CHAR(DT.OP_DATES.LST_UPDT_TMSP,'DD-MM-YY'),而不是使用别名。这将避免子查询外部查询结构。它更加打字,但效率并不高。该函数在查询中出现两次,但实际上并未执行两次。 Oracle引擎足够聪明,可以看到它是相同的函数,所以它只计算一次(对于每一行)。 – mathguy
非常感谢! – BreenDeen