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)