当前位置: 首页 > 面试题库 >

比较Oracle情况下的字符串

欧阳斌
2023-03-14
问题内容

我在何时遇到oracle的问题。

SELECT CASE WHEN '7C54D3E133830A78E040A8C010014B7D' != ''
            THEN '7C54D3E133830A78E040A8C010014B7D'
            WHEN 'e84a4433966c4b8996ce34905acff63d' != ''
            THEN 'e84a4433966c4b8996ce34905acff63d'
            WHEN '7faa9126b1c6412fa58375ab2b2be1db' != ''
            THEN '7faa9126b1c6412fa58375ab2b2be1db'
            ELSE NULL
 END
 FROM DUAL

该查询始终返回null,尽管很明显结果应该是第一种情况。我是否缺少有关oracle中字符串比较的内容?


问题答案:

您要再次检查字符串和一个空字符串,从而出现问题;在Oracle中,您最好检查一下您的字符串is not null

SELECT CASE WHEN '7C54D3E133830A78E040A8C010014B7D' is not null
            THEN '7C54D3E133830A78E040A8C010014B7D'
            WHEN 'e84a4433966c4b8996ce34905acff63d' is not null
            THEN 'e84a4433966c4b8996ce34905acff63d'
            WHEN '7faa9126b1c6412fa58375ab2b2be1db' is not null
            THEN '7faa9126b1c6412fa58375ab2b2be1db'
            ELSE NULL
 END
 FROM DUAL

关于Oracle处理空字符串和空值的方式,在这里您可以找到更多信息

一个例子:

select q'['' = '']'         , case when '' = ''            then 'YES' else 'NO' end from dual union all
select q'['' is null]'      , case when '' is null         then 'YES' else 'NO' end from dual union all 
select q'['' = null ]'      , case when '' = null          then 'YES' else 'NO' end from dual union all 
select q'[null = null]'     , case when null = null        then 'YES' else 'NO' end from dual union all 
select q'[null is null]'    , case when null is null       then 'YES' else 'NO' end from dual union all 
select q'['' != '']'        , case when '' != ''           then 'YES' else 'NO' end from dual union all
select q'['' is not null]'  , case when '' is not null     then 'YES' else 'NO' end from dual union all
select q'['' != null ]'     , case when '' != null         then 'YES' else 'NO' end from dual union all
select q'[null != null]'    , case when null != null       then 'YES' else 'NO' end from dual union all
select q'[null is not null]', case when null is not null   then 'YES' else 'NO' end from dual

给出:

'' = ''           NO
'' is null        YES
'' = null         NO
null = null       NO
null is null      YES
'' != ''          NO
'' is not null    NO
'' != null        NO
null != null      NO
null is not null  NO

简而言之,谈论时,您可以依靠的唯一支票NULL是: IS [NOT] NULL



 类似资料:
  • 问题内容: 我需要查询表中给定字符串的值。该表区分大小写,但我想在比较中执行ToLower()。 假设我有一个包含以下数据的类表。 我的查询应该是这样的 这是进行比较的最佳方法吗? 更新 我无法控制数据库或数据。我是只读用户。 问题答案: 不; 最好改善数据:创建一个数字ID,以表示这些看似毫无意义的类变体(可能还有一个相关的查找表来获取ID)。使用where子句中的ID列,您应该找到一个索引数字

  • 问题内容: 我正在阅读oracle的基础知识,并遇到了奇怪的陈述。我不知道这是真的。 声明说 “字符串值‘2’大于字符串值‘100’。字符‘1’小于字符‘10’。” 请就上述话题发表一些看法。我了解必须使用ASCII值进行内部比较。我正在寻求一些合理的解释。 问题答案: 这意味着被视为字符串的数字不是按 数字顺序 而是按 词汇顺序排序 ,这与字典中单词的排序方式相同。即,从左侧一次比较一个字符。

  • 问题内容: 检查数组arr1是否包含与arr2相同的元素,并且在Java中的顺序相同。 例如: 到目前为止,我有 问题在于它只比较两个数组的第一个元素。 问题答案: 您正在迭代直到找到匹配项。相反,您应该寻找不匹配的字符串,并且应该使用 not 仅供参考,这也是Arrays.equals在处理值时所做的事情。

  • 问题内容: 我听说散列(即将字符串或对象转换为数字)用于字符串等,因为比较数字比字符串更容易。如果为真,这是什么原因? 问题答案: 不一定是这种情况,但大多数时候可能是这样。 请考虑以下情况: 我想比较字符串“ apples”和“ oranges”。如果我只想确定“ apples” ==“ oranges”,我只需要比较每个字符串的第一个字符:’a’!=’o’=>“ apples”!=“ oran

  • 问题内容: 我需要一个函数来在两个字符串之间进行比较,而不必考虑oracle中的顺序。即“ asd”和“ sad”应被视为相等。有类似的功能吗?还是我需要编写自己的函数? 问题答案: 可以使用一个简单的Java函数按字母顺序对字符串的字符进行排序: 然后,您可以创建一个PL / SQL函数来调用: 然后,您可以对排序后的字符串进行简单比较:

  • 主要内容:equals() 方法,equalsIgnoreCase() 方法,equals()与==的比较,compareTo() 方法字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相