oracle操作符

LIKE操作符
我 们可以使用LIKE操作符来判断一个字符、字符串或CLOB类型的值是不是与我们指定的样式相匹配。如果样式匹配,LIKE就会返回TRUE,否则返回 FALSE。用于LIKE匹配的样式中,包含两种通配符。下划线(_):精确匹配一个字符;百分号(%):匹配零个或多个字符。如下面的例子中,如果 ename的值是"JOHNSON",那么表达式结果就为TRUE:
ename LIKE 'J%SON'


BETWEEN操作符
BETWEEN操作符用于判断目标值是否在指定的目标范围内。例如,下面表达式的结果就为FALSE:
45 BETWEEN 38 AND 44


IN操作符
IN操作符是用于测试目标值是否是集合成员之一。其中,集合是可以包含NULL值的,但它们是被忽略的。例如,下面这个语句并不会删除ename值为NULL的行:
DELETE FROM emp
      WHERE ename IN (NULL, 'KING', 'FORD');

双竖线(||)可以当作字符连接操作符,可以将两个字符串(CHAR、VARCHAR2、CLOB或等价的Unicode支持的类型)连接起来。例如表达式
'suit' || 'case'
返回的结果就是
'suitcase'
如果操作符两边的操作数都是CHAR类型,连接操作符返回的结果就是CHAR值。如果其中一个是CLOB值,操作符就返回临时CLOB。其余情况均返回VARCHAR2类型。

布尔字符表达式
我们也可以比较字符的等或不等。默认情况下,比较都是基于字符串中每个字节的二进制值的。比如,下面例子中的表达式结果就为真:
string1    := 'Katdy';
string2    := 'Katdleen';

string1 > string2   -- TRUE
设置初始化参数NLS_COMP=ANSI,就能使用初始化参数 NLS_SORT指定的整理序列(collating sequence)来进行比较。整理序列是一个字符集中表现字符的数字代码(numeric code)的内部顺序,如果一个字符的数字代码比另一个大,那这个字符就比另一个字符大。关于字符在整理序列中出现的位置,每种语言都可能有不同的定义规 则。比如说,重音字母可能会因数据库的字符集的不同而排序不同,即使每一种情况下的二进制值都相同。

布尔日期表达式
对于日期类型的比较,是按照年代的顺序的。如下例,date1的值是大于date2的值的。
date1    := '01-JAN-91';
date2    := '31-DEC-90';

date1 > date2   -- TRUE

在作比较时使用括号是一个好习惯。例如,下面的这样的表达式形式是不允许的,因为 100 < tax 的结果是布尔型,而布尔型是不能和数字500进行比较的。
100 < tax < 500   -- not allowed
解决方法是使用下面这样的表达式:
(100 < tax) AND (tax < 500)

CASE表达式
一个CASE表达式从一个或多个供选方案中选择一个返回结果。CASE表达式使用一个选择器来决定返回哪一个分支的结果。具体的语法形式如下:
CASE selector
  WHEN expression1 tdEN result1
  WHEN expression2 tdEN result2
  ...
  WHEN expressionn tdEN resultn
  [ELSE resultN+1]
END;

选择器后面跟着一个或多个WHEN子句,它们会被依次验证的。一旦有一个WHEN子句满足条件的话,剩下的分支条件就不再执行了。例如:
DECLARE
  grade       CHAR(1)      := 'B';
  appraisal   VARCHAR2(20);
BEGIN
  appraisal    := CASE grade
                   WHEN 'A' tdEN 'Excellent'
                   WHEN 'B' tdEN 'Very Good'
                   WHEN 'C' tdEN 'Good'
                   WHEN 'D' tdEN 'Fair'
                   WHEN 'F' tdEN 'Poor'
                   ELSE 'No such grade'
                 END;
END;
其中,ELSE子句是可选的,工作方式同IF语句中的ELSE子句相似。如果我们不提供ELSE子句,并且选择器没有匹配任何WHEN子句,表达式的返回的结果就是NULL。

这种形式的CASE表达式的另外一种使用方法就是CASE语句,其中每个WHEN子句都可以是一个完整的PL/SQL块。
• 搜索式CASE表达式
PL/SQL也提供了搜索式的CASE表达式,它的语法形式如下:
CASE
  WHEN expression1 tdEN result1
  WHEN expression2 tdEN result2
  ...
  WHEN expressionn tdEN resultn
  [ELSE resultN+1]
END;
搜索式CASE表达式没有选择器。每个WHEN子句包含一个能返回布尔值的搜索条件。例子如下:
DECLARE
  grade       CHAR(1);
  appraisal   VARCHAR2(20);
BEGIN
  ...
  appraisal    := CASE
                   WHEN grade = 'A' tdEN 'Excellent'
                   WHEN grade = 'B' tdEN 'Very Good'
                   WHEN grade = 'C' tdEN 'Good'
                   WHEN grade = 'D' tdEN 'Fair'
                   WHEN grade = 'F' tdEN 'Poor'
                   ELSE 'No such grade'
                 END;
  ...
END;
搜 索条件按顺序计算。搜索条件的布尔值决定了哪个WHEN子句被执行。如果搜索条件的值为TRUE,它对应的WHEN子句就会被执行。只要其中一个WHEN 子句被执行,后续的搜索条件就不会被计算了。如果没有匹配的条件,可选的ELSE就会被执行。如果没有匹配的WHEN子句,也没有ELSE子句,表达式的 结果就为NULL。

函数
如果给内置函数传递空值,一般也都会返回空值,但以下几种情况除外。
函数DECODE 将它的第一个参数和后面的一个或多个表达式相比较(表达式的值有可能为空),如果比较的内容相匹配,就会返回后面的结果表达式。例如在下面的例子中,如果字段rating的值为空,DECODE就会返回1000:
SELECT DECODE(rating,
              NULL, 1000,
              'C', 2000,
              'B', 4000,
              'A', 5000
             )
  INTO credit_limit
  FROM accts
 WHERE acctno = my_acctno;
函数NVL 在判断出第一个参数是空的情况下,会返回第二个参数的值,否则直接返回第一个参数的值。使用方法如下:
start_date := NVL(hire_date, SYSDATE);

函数REPLACE第二个参数是NULL的时候,它就会返回第一个参数的值,不管是否有第三个参数。例如,在下面例子中,结果字符串new_string的值和old_string的值完全一样。
new_string := REPLACE(old_string, NULL, my_string);
如果第三个参数为空的话,REPLACE就会把第一个参数中出现的第二个参数删除,然后返回结果。如下面这个例子:
  syllabified_name    := 'gold - i - locks';
  NAME                := REPLACE(syllabified_name,
                                 ' - ',
                                 NULL
                                );
运算的结果字符串是"goldilocks"。如果第二个和第三个参数都是NULL值,REPLACE就直接返回第一个参数。

内置函数
PL/SQL为我们提供了许多功能强大的数据操作函数。这些函数可以分为以下几类:
1. 错误报告
2. 数字
3. 字符
4. 类型转换
5. 日期
6. 对象引用
7. 杂项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值