如何在oracle中使用子查询时解决区分大小写的问题

时间:2017-10-11 14:53:20

标签: oracle oracle11g

  select * from  ur_username u 
   join ur_username_person up 
   on up.username_id=u.username_id  
   join ur_person p on up.person_id=p.person_id 
   join ur_system s on u.system_id=s.system_id 
   WHERE U.USERNAME IN  (select username from ur_username where system_id=349 and  status='DISABLED') AND U.STATUS='ACTIVE'

在where子句中的上述代码中,子查询中的所有用户名都将被存储,我希望所有用户名无论大小写应该存储在我尝试使用的where子句(UPPER)中,但只能获得大写的用户名。 请在此提出任何建议。 例如,在子查询中我得到了" ccku"结果,但当涉及到我想要存储的where子句时," ccku"和" CCKU"

请帮我解决上述问题

3 个答案:

答案 0 :(得分:0)

当您尝试使用鞋帮时,您是否在where子句中执行此操作?

WHERE 
UPPER(U.USERNAME) IN
UPPER(select username from ur_username where system_id=349 and  status='DISABLED')

答案 1 :(得分:0)

这不是超级高效的,但您可以检查子查询两次。一次使用upper(),一次使用lower()。

WHERE (upper(U.USERNAME) IN  (select username from ur_username where system_id=349 and  status='DISABLED')
    or lower(U.USERNAME) IN  (select username from ur_username where system_id=349 and  status='DISABLED'))
AND U.STATUS='ACTIVE'

答案 2 :(得分:0)

这是因为您将SEC_CASE_SENSITIVE_LOGON参数的设置设置为“TRUE”, 将此参数设置为“FALSE”可能会解决您的问题。

SQL> show parameter sec_case_sensitive_logon SQL> alter system set sec_case_sensitive_logon = false scope = both;