OraleDB使用单行函数定制输出

  • 格式:doc
  • 大小:951.00 KB
  • 文档页数:17

• 描述SQL 提供的各类函数• 在SELECT 语句中使用字符、数字和日期函数∙SQL 函数函数是SQL 的一项非常强大的功能,可用于执行以下操作:• 执行数据计算• 修改单个数据项• 处理成组行的输出• 设置日期和数字的显示格式• 转换列数据类型SQL 函数有时接受多个参数,但始终返回一个值。

∙两种类型的SQL 函数有两种类型的函数:• 单行函数• 多行函数单行函数这些函数仅对单行进行处理,为每行返回一个结果。

单行函数具有多种不同类型。

介绍以下几种函数:• 字符• 数字• 日期• 转换• 常规多行函数这些函数可以处理成组的行,为每组行返回一个结果。

∙单行函数单行函数:• 处理数据项• 接受参数并返回一个值• 对每个返回行进行处理• 为每行返回一个结果• 可能会修改数据类型• 可以嵌套• 接受参数,这些参数可以是列或表达式function_name [(arg1, arg2,...)]在该语法中:function_name:是函数的名称arg1, arg2:是函数使用的任意参数,可以是列名称或表达式。

单行函数用于处理数据项。

其接受一个或多个参数,并对查询返回的每一行返回一个值。

参数可以是下列对象之一:• 用户提供的常量• 变量值• 列名• 表达式单行函数的特点包括:• 对查询中返回的每一行进行处理• 为每行返回一个结果• 可能会返回一个与所引用类型不同的数据值• 可能需要一个或多个参数• 可用于SELECT 、WHERE和ORDER BY 子句中;也可以嵌套。

将介绍以下单行函数:• 字符函数:接受字符输入,可以返回字符值和数字值• 数字函数:接受数字输入,可以返回数字值• 日期函数:对DATE 数据类型的值进行处理(所有日期函数都会返回一个DATE 数据类型的值,只有MONTHS_BETWEEN 函数返回一个数字。

)• 转换函数:将值从一种数据类型转换为另一种数据类型• 常规函数:- NVL- NVL2- NULLIF- COALESCE- CASE- DECODE字符函数单行字符函数接受的输入是字符数据,可以返回字符值和数字值。

字符函数可以分为以下几类:• 大小写转换函数• 字符处理函数注:以下是一些完全或部分符合SQL:2003 的函数:UPPERLOWERTRIMLENGTHSUBSTRINSTR大小写转换函数以下函数用于转换字符串的大小写:LOWER、UPPER和INITCAP是三个大小写转换函数。

• LOWER:将大小写混合或大写的字符串转换为小写• UPPER:将大小写混合或小写的字符串转换为大写• INITCAP:将每个单词的首字母转换为大写,其余字母保留为小写hr@TEST0924> SELECT 'The job id for '||UPPER(last_name)||' is '||LOWER(job_id) AS "EMPLOYEE DETAILS" FROM employees;EMPLOYEE DETAILS------------------------------------------------------The job id for ABEL is sa_repThe job id for ANDE is sa_repThe job id for ATKINSON is st_clerk使用大小写转换函数使用以下语句可显示雇员Higgins 的雇员编号、姓名和部门编号:hr@TEST0924> SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'higgins';no rows selected第一个SQL 语句的WHERE子句将雇员姓名指定为higgins。

因为EMPLOYEES 表中的所有数据都是以正常大小写形式存储的,所以姓名higgins在表中没有找到匹配项,因此不会选择任何行。

hr@TEST0924> SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) = 'higgins';EMPLOYEE_ID LAST_NAME DEPARTMENT_ID----------- ------------------------- -------------205 Higgins 110第二个SQL 语句中的WHERE子句指定将EMPLOYEES 表中的雇员姓名与higgins进行比较,但是先将LAST_NAME 列转换为小写,然后再进行比较。

因为两个姓名都是小写的,因此找到了匹配项,从而选择了一行。

可以按以下方式重写WHERE子句,产生的结果相同:...WHERE last_name = 'Higgins'输出中姓名的显示格式与其存储在数据库中的一样。

要以大写形式显示姓名,可以在SELECT 语句中使用UPPER函数。

hr@TEST0924> SELECT employee_id, UPPER(last_name), department_idFROM employees WHERE INITCAP(last_name) = 'Higgins';EMPLOYEE_ID UPPER(LAST_NAME) DEPARTMENT_ID----------- ------------------------- -------------205 HIGGINS 110字符处理函数下面的函数用于处理字符串:CONCAT 、SUBSTR 、LENGTH 、INSTR、LPAD、RPAD 和TRIM 是要介绍的字符处理函数。

• CONCAT :将值联接在一起(CONCAT 函数中只能使用两个参数)• SUBSTR :提取确定长度的字符串• LENGTH :以数字值的形式显示字符串的长度• INSTR:查找指定字符串的数字位置• LPAD:返回一个表达式,左边使用一个字符表达式填充到n 个字符的长度• RPAD:返回一个表达式,右边使用一个字符表达式填充到n 个字符的长度• TRIM:截去字符串首字符或尾字符(或者两者都截去)(如果trim_character或trim_source 是一个字符文字,则必须将其放在单引号内)注:可以将UPPER和LOWER等函数与& 替代变量组合使用。

例如,如果使用UPPER('&job_title'),用户就不必以特定的大小写形式输入职务了。

instr( string1, string2, start_position,nth_appearance )string1源字符串,要在此字符串中查找。

string2要在string1中查找的字符串。

start_position代表string1 的哪个位置开始查找。

此参数可选,如果省略默认为1. 字符串索引从1开始。

如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。

nth_appearance代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。

使用字符处理函数hr@TEST0924>l1 SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), INSTR(last_name, 'a') "Contains 'a'?"2* FROM employees WHERE SUBSTR(job_id, 4) = 'REP'hr@TEST0924> /EMPLOYEE_IDNAME JOB_ID LENGTH(LAST_NAME) Contains 'a'?----------- --------------------------------------------- ---------- ----------------- -------------202PatFay MK_REP 3 2 203SusanMavris HR_REP 6 2 204HermannBaer PR_REP 4 2示例中显示从其职务ID 的第四个位置开始包含字符串REP 的所有雇员的以下信息:联接在一起的名字和姓氏、雇员姓氏的长度,以及字母a 在雇员姓氏中的数字位置。

示例:修改幻灯片中的SQL 语句,以显示姓氏以字母“n”为结尾的雇员的数据。

hr@TEST0924> SELECT employee_id, CONCAT(first_name, last_name)NAME,LENGTH (last_name), INSTR(last_name, 'a') "Contains 'a'?"2 FROM employees WHERE SUBSTR(last_name, -1, 1) = 'n';EMPLOYEE_ID NAME LENGTH(LAST_NAME) Contains 'a'?----------- --------------------------------------------- ----------------- -------------102 LexDe Haan 7 5105 DavidAustin 6 0∙数字函数• ROU ND:将值舍入到指定的小数位• TRUNC:将值截断到指定的小数位• MOD :返回除法运算的余数数字函数接受数字形式的输入并返回数字值。

∙使用ROUND 函数hr@TEST0924> SELECT ROUND(45.923,2), ROUND(45.923,0),ROUND(45.923,-1) FROM DUAL;ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)--------------- --------------- ----------------45.92 46 50ROUND函数用于将列、表达式或值舍入到n 位小数位。

如果第二个参数为0 或者缺失,则会将值舍入为整数。

如果第二个参数为2,则会将值舍入到2 位小数位。