首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00920:使用case时关系运算符无效

ORA-00920:使用case时关系运算符无效
EN

Stack Overflow用户
提问于 2017-05-25 19:16:52
回答 2查看 3.5K关注 0票数 0

我正在使用oracle developer编写代码来查看是否有连续3天的设备登录,我正在使用case函数编写代码,但它给出了无效关系运算符错误。我不知道我错在哪里。

提前感谢

代码语言:javascript
复制
SELECT *FROM
(SELECT a.*,substr(TEXT_USERNAME,2,length(TEXT_USERNAME)-2), row_number() 
over (partition by trunc(DTIME_LOGIN) order by TEXT_USERNAME ) rn

 FROM 
  OWNER_DWH.F_HOSEL_USER_LOGIN_TT a)

 WHERE

  (CASE WHEN trunc(dtime_login)=trunc(sysdate-1) then  'y'
  ELSE 'n' END ) D1
  and 
   (CASE WHEN trunc(dtime_login)=trunc(sysdate-2) then  'y'
  ELSE 'n' END) D2
  and 
   (CASE WHEN trunc(dtime_login)=trunc(sysdate-3) then  'y'
  ELSE 'n' END) D3
EN

回答 2

Stack Overflow用户

发布于 2017-05-25 19:20:03

这修复了您的语法错误。但是代码不会返回任何行,因为您的逻辑是错误的:

代码语言:javascript
复制
WHERE 'y' = (CASE WHEN trunc(dtime_login) = trunc(sysdate-1) then 'y' ELSE 'n' END) AND
      'y' = (CASE WHEN trunc(dtime_login) = trunc(sysdate-2) then 'y' ELSE 'n' END) AND
      'y' = (CASE WHEN trunc(dtime_login) = trunc(sysdate-3) then 'y' ELSE 'n' END)

我建议你用样本数据和期望的结果问另一个问题,并清楚地解释你想要完成什么。

票数 1
EN

Stack Overflow用户

发布于 2017-05-25 22:36:10

当你写一个查询时,你是在问一个关于数据的问题。谓词或where子句是用于限制要返回的行的特定问题。这..。

代码语言:javascript
复制
(CASE WHEN trunc(dtime_login)=trunc(sysdate-1) then  'y'
      ELSE 'n' END ) D1

..。实际上是一个有效的谓词。在这里,您正在运行一个CASE语句内容,该语句内容将返回值,但是该值永远不会与常量或其他值进行比较。相反,您似乎正在尝试分配一个别名,该别名仅用于select列。

也许您正在考虑下面这样的事情。在这里,对CASE语句求值,并根据值'y‘测试结果值。

代码语言:javascript
复制
(CASE WHEN trunc(dtime_login)=trunc(sysdate-1) then  'y'
      ELSE 'n' END ) = 'y'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44179234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档