SQL函数Instr()

时间:2012-01-17 16:20:42

标签: sql oracle

我有一个名为DP的列如下所示:

 07-APR-2011
 12-APR-2011
 26-APR-2011

现在要检索用于选择在4月份进行的付款的查询,我遇到了一个查询

select * from payments where instr(dp,'APR')<>0

好的,我很熟悉INSTR功能和&gt;签名,但不能用<> sign在这里解释逻辑!

[更新]

我也知道<>相当于!=。 但我的观点是我们可以使用
      instr(dp,'APR')代替instr(dp,'APR')<>0

2 个答案:

答案 0 :(得分:6)

<>表示“不等于”。如果您愿意,也可以写!=

如果instr(dp,'APR')不是'APR'的子字符串,则

dp返回零,因此instr(dp,'APR')<>0表示“'APR'dp的子字符串” 。它也可以写成dp LIKE '%APR%'

更新更新的问题:

  

但我的观点是,我们可以使用instr(dp,'APR')代替instr(dp,'APR')<>0

不,你不可能。 SQL的一些方言将零视为“false”,将其他整数视为“true”,但Oracle不会这样做。它将整数和布尔值视为单独的类型,并且不会在它们之间隐式转换。 WHERE 0不是有效的WHERE子句。

答案 1 :(得分:3)

<> 不等于 - 基本上它会检查字符串中是否出现'APR'的子字符串。

如果该函数返回0,则表示'APR'未出现在要搜索的字符串中的任何位置。