《Oracle Database编程指南》14:表达式(Expressions)

1、定义

表达式(Expressions)是一个或多个值、运算符和SQL函数的组合,计算结果为一个值,表达式的数据类型通常取决于其组件。

比如,这个简单的表达式2 * 2计算结果为4,并具有数据类型NUMBER(与其组件相同的数据类型):

SELECT  2 * 2  AS  "result"  FROM   dual;

输出结果为:

    result
----------
         4

比如,表达式TO_CHAR(TRUNC(SYSDATE+7))是一个同时使用函数和运算符的更复杂表达式的示例,它将当前日期再加7天,并将结果转换为CHAR数据类型:

SELECT  TO_CHAR(SYSDATE+7)   AS   "result"  FROM   dual;

输出结果为:

result        
--------------
17-3月 -20

2、使用场景

  • SELECT语句的SELECT列表
  • WHERE子句和HAVING子句的条件
  • CONNECT BY、START WITH和ORDER BY子句
  • INSERT语句的VALUES子句
  • UPDATE语句的SET子句

例如,我们的员工表emp中有一些数据,如下:

SELECT  *   FROM   emp ORDER BY comm;
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7844 TURNER     SALESMAN        7698 08-9月 -81       1500          0         30
      7499 ALLEN      SALESMAN        7698 20-2月 -81       1600        300         30
      7521 WARD       SALESMAN        7698 22-2月 -81       1250        500         30
      7654 MARTIN     SALESMAN        7698 28-9月 -81       1250       1400         30

现在,我们想把工号为7654的员工MARTIN的名字改为“Martin”,可以直接在Set子句中引用字符串'Martin'

SET ename = 'Martin'

但是,这种写法不太完美,如果每个员工的姓名都要按首字母大写的格式去修改呢?所以,我们用一个表达式来代替UPDATE语句SET子句中引用的字符串'Martin',UPDATE语句如下:


UPDATE emp 
SET ename = INITCAP(ename)
WHERE empno = 7654;

注意,上面的SET子句的表达式是INITCAP(ename),而不是带单引号的'Martin'。执行后的输出结果如下:

扫描二维码关注公众号,回复: 9744591 查看本文章
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7844 TURNER     SALESMAN        7698 08-9月 -81       1500          0         30
      7499 ALLEN      SALESMAN        7698 20-2月 -81       1600        300         30
      7521 WARD       SALESMAN        7698 22-2月 -81       1250        500         30
      7654 Martin     SALESMAN        7698 28-9月 -81       1250       1400         30

您会发现,工号为7654的员工MARTIN的名字已经改为Martin,接下来,如果我们想把所有员工的名字都变成该格式的话,只需要修改下UPDATE 语句:

UPDATE emp 
SET ename = INITCAP(ename);

执行UPDATE语句成功后,查询emp表,其结果为:

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7844 Turner     SALESMAN        7698 08-9月 -81       1500          0         30
      7499 Allen      SALESMAN        7698 20-2月 -81       1600        300         30
      7521 Ward       SALESMAN        7698 22-2月 -81       1250        500         30
      7654 Martin     SALESMAN        7698 28-9月 -81       1250       1400         30

您会发现,所有员工的姓名格式都是首字母大写格式了,这便是表达式的特殊魅力!

3、表达式的分类

  • 简单表达式(Simple Expressions)
  • CASE表达式(CASE Expressions)
  • Datetime表达式(Datetime Expressions)
  • 解析视图表达式(Analytic View Expressions)
  • 复合表达式(Compound Expressions)
  • 列表达式(Column Expressions)
  • 游标表达式(CURSOR Expressions)
  • 函数表达式(Function Expressions)
  • 间隔表达式(Interval Expressions)
  • JSON对象访问表达式(JSON Object Access Expressions)
  • 模型表达式(Model Expressions)
  • 对象访问表达式(Object Access Expressions)
  • 占位符表达式(Placeholder Expressions)
  • 标量子查询表达式(Scalar Subquery Expressions)
  • 类型构造器表达式(Type Constructor Expressions)
  • 表达式列表(Expression Lists)

表达式的形式

发布了39 篇原创文章 · 获赞 41 · 访问量 8251

猜你喜欢

转载自blog.csdn.net/goldentec/article/details/104787986