oracle trunc函数_Java修行第029天---Oracle函数

2.5逻辑条件关系

逻辑条件:逻辑条件组合两个比较条件的结果来产生一个基于这些条件的单个的结果,或者逆转一个单个条件的结果。当所有条件的结果为真时,返回行。SQL 的三个逻辑运算符是:AND 、OR 、NOT 。

2.5.1AND

AND:AND 要求两个条件同时为真。

2.5.1.1 示例

查询工作岗位包含字符串 MAN 并且收入大于等于$10,000 的那些雇员的编号、工作ID、名字以及薪水。

10a1f22e862e03b81a0de2a487c7fa8d.png

2.5.2OR

OR:OR 操作要求两者之一为真即可。

2.5.2.1 示例

查询任何 job ID 中包含 MAN 或者收入大于等于$10,000 的雇员编号、工作 ID、名字以及薪水.

6e7ddac057fa0c9737204984fb81228b.png

2.5.3NOT

NOT:取反。NOT 运算符也可以用于另一个 SQL 运算符,例如,BETWEEN、LIKE、IN 和 NULL。

2.5.3.1 示例

查询那些工作岗位不是 IT_PROG、ST_CLERK 或 SA_REP 的雇员的名字和工作岗位。

584c87945e64c80b209b6a5fa8b744eb.png

2.6优先规则

3a3b7a70ada4d89efc9b698871a82b69.png

优先规则:优先规则定义表达式求值和计算的顺序,表中列出了默认的优先顺序。你可以用圆括号括住你想要先计算的表达式来覆盖默认的优先顺序。

2.6.1示例一

查询工作岗位是 SA_REP 或者工作岗位是 AD_PRES 并且薪水大于 15000 的员工姓名、工作 ID 以及薪水。

62bdc8a0090d6df24983c6d0240138b5.png

2.6.2示例二

查询工作岗位是 SA_REP 或者是 AD_PRES 并且他们的薪水大于 15000 的员工姓名、工作 ID 以及薪水。

320afbef4205072290f93c7b79bb87e3.png

2.7使用 ORDER BY 排序

2.7.1ORDER BY 子句作用

用 ORDER BY 子句排序

ASC: 升序排序,默认

DESC: 降序排序

ORDER BY 子句:用于对结果集进行排序处理,提供了升序排序(ASC)与降序排序

(DESC)如果不指定排序规则默认为升序排序。在排序中也可以使用没有包括在 SELECT 子

句中的列排序。如果未使用 ORDER BY 子句,排序次序就未定义,并且 Oracle 服务器可

能对于相同查询的两次执行取回行的顺序不同。

2.7.2ORDER BY 语法

ORDER BY 子句在 SELECT 语句的最后

ORDER BY 后侧指定需要排序列

ASC 以升序排序行 (这是默认排序)

DESC 以降序排序行

2.7.3升序规则

对于数字值,小的值在前面显示—例如,1–999。

对于日期,早的日期在前面显示—例如,01-1-92 在 01-1-95 前面 。

对于字符值,依字母顺序显示—例如,A 第一,Z 最后。

对于空值,升序排序时显示在最后,降序排序时显示在最前面

2.7.3.1 示例

对于空值,升序排序时显示在最后,降序排序时显示在最前面

9301e57cc97531759e239a538e96f689.png

92099bf22ee2ad25f28f80f0267734f3.png

2.7.4列号排序

可以使用投影的列的序号指定排序列,但是不推荐此种做法。

2.7.4.1 示例

1e95a334c329a134c4184227b0583b52.png

2.7.5用列别名排序

可以使用列的别名指定排序列。

2.7.5.1 示例

d589f22f6c038e566707c101affd43f7.png

2.7.6多列排序

多列排序:可以用多列排序查询结果。在 ORDER BY 子句中,多个指定的列名之间用逗号分开。如果想要对某个列倒序排序需则在该列名后面指定 DESC。

2.7.6.1 示例:

5b4c09ebee1645f096e24e041be2d5c2.png

2.7.7SELECT 语句的执行顺序如下:

FROM 子句

WHERE 子句

SELECT 子句

ORDER BY 子句

2.8约束与排序小节练习

2.8.1创建一个查询,显示收入超过 $12,000 的雇员的名字和薪水。

08d1614cfcc5a94bc383db121257ccf4.png

2.8.2 创建一个查询,显示雇员号为 176 的雇员的名字和部门号。

923efb6642045b8897a561b511670259.png

2.8.3显示所有薪水不在 5000 和 12000 之间的雇员的名字和薪水。

8bed2e564c680e088ea2637f73f4c6ac.png

2.8.4显示受雇日期在 2002 年 2 月 20 日 和 2007 年 5 月1 日 之间的雇员的名字、岗位和受雇日期。按受雇日期顺序排序查询结果。

0752ca8b64085bb5801cd4214d42a45c.png

2.8.5显示所有在部门 20 和 50 中的雇员的名字和部门号,并以名字按字母顺序排序。

ab79ea36d840b5f339e89d973ee5602d.png

2.8.6 列出收入在 $5,000 和 $12,000 之间,并且在部门 20或 50 工作的雇员的名字和薪水。将列标题分别显示为Employee 和 Monthly Salary。

927fdbef36131b149b073f2b9ce18dbb.png

2.8.7显示每一个在 2004 年受雇的雇员的名字和受雇日期。

728d87bd632481900b5649e1dc8905a1.png

2.8.8显示所有没有主管经理的雇员的名字和工作岗位。

c4f1c7041a2b758e874b4b812b697880.png

2.8.9显示所有有佣金的雇员的名字、薪水和佣金。以薪水和佣金的降序排序数据。

368aebc6c5b082abe5c4a83c0732c792.png

2.8.10 显示所有名字中第三个字母是 a 的雇员的名字。

430d25520a29bdffbced3d11835b0f32.png

2.8.11 显示所有名字中有一个 a 和一个 e 的雇员的名字。

239dd9500efdc2b2d8f136580b092111.png

2.8.12 显示所有工作是销售代表(SA_REP)或者普通职员(ST_CLERK),并 且薪水不 等于 $2,500、$3,500 或$7,000 的雇员的名字、工作和薪水。

570702557e0e7a99e95056d6a8da02fc.png

2.8.13 显示所有佣金总计为 20% 的雇员的名字、薪水和佣金。

答案:

法一:select last_name,salary,commission_pct

from employees where commission_pct = 0.2;

cd4b87a5e130e4d418a75379c8563d80.png

法二:select last_name,salary,commission_pct

from employees where commission_pct = .20;

038d679d4f3f4408ad0f5dfae4c3199a.png

3 Oracle 函数

3.1函数介绍

3.1.1什么是函数

函数:是数据库产品中提供的能够处理查询结果的方法。

函数能够用于下面的目的:

• 执行数据计算

• 修改单个数据项

• 格式化显示的日期和数字

• 转换列数据类型

• 函数有输入参数,并且总有一个返回值。

a38b93e1a301bbd644962d7e857968af.png

3.1.2函数类型

单行函数:这些函数仅对单个行进行运算,并且每行返回一个结果。

多行函数(聚合函数):这些函数能够操纵成组的行,每个行组给出一个结果,这些函数也被称为组函数

04a9d271080c4b6debae40ae1e834df2.png

3.1.3函数语法

function_name(arg1,arg2,.....)function_name:是函数的名字。

arg1, arg2:是由函数使用的任意参数。参数可以是一个列名、用户提供的常数、变量值、或者一个表达式。

3.2单行函数

3.2.1单行函数的特性包括:

• 作用于每一个返回行,每行返回一个结果

• 可能需要一个或多个参数

• 可以修改结果集的数据类型

• 可以嵌套

• 可能返回一个与参数不同类型的数据值

• 能够用在 SELECT、WHERE 和 ORDER BY 子句中

3.2.2单行函数分类

40812fdf36c381035213809beaa08576.png

字符函数:接受字符输入,可以返回字符或者数字值

数字函数:接受数字输入,返回数字值

日期函数:对 DATE 数据类型的值进行运算 (除了 MONTHS_BETWEEN 函数返回一个数字,所有日期函数都返回一个 DATE 数据类型的值。)

转换函数:从一个数据类型到另一个数据类型转换一个值

通用函数:

− NVL

− NVL2 − NULLIF − COALSECE

− CASE

− DECODE

3.3字符函数

字符函数:单行字符函数接受字符数据作为输入,既可以返回字符值也可以返回数字值。

3.3.1字符函数分类

• 大小写处理函数

• 字符处理函数

242e219e1c24d32d6af6cd101572ea19.png

3.3.2大小写处理函数

cc53d660e8fd1c4b077c5db7f5be4e05.png

LOWER:转换大小写混合的字符串为小写字符串。

UPPER:转换大小写混合的字符串为大写字符串。

INITCAP:将每个单词的首字母转换为大写,其他字母为小写。大小写处理函数需要一个参数,参数类型为字符串类型,返回一个字符串。

3.3.3示例一

查询员工表,使用 “ The Job id for ”链接转换大写格式后的员工姓名,并使用“ is ”字符串链接他们工作 ID,要求将工作 ID 转换小写格式。修改列名为“EMPLOYEE DETAILS”。

6e672aed12205da8aec158f6ccee83d9.png

3.3.4示例二

显示雇员 higgins 的雇员号、姓名和部门号

d0c13fb493125e8336bfe1dab5ade142.png

a27fc929742027bdf22f8a65a89b5712.png

3.4字符处理函数

dual 表:dual 是一张只有一个字段,一行记录的表。dual 表也称之为'伪表',因为他不

存储主题数据。如果我们不需要从具体的表来取得表中数据,而是单纯地为了得到一些我们

想得到的信息,并要通过 select 完成时,就要借助 dual 表来满足结构化查询语言的格式

CONCAT(arg1,arg2):连接值在一起 (CONCAT 函数有两个输入参数)

SUBSTR(arg1,arg2,arg3):截取子串。

arg1:字符串类型。原字符串,

arg2:整数类型。开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,-2 则

表示倒是第二位以此类推),

arg3:整数类型。截取个数。

SUBSTR(arg1,arg2):截取子串。

arg1:字符串类型。原字符串。

arg2 开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,-2 则表示倒是第二

位以此类推)截取到末尾。

LENGTH(arg1):以数字值显示一个字符串的长度。

arg1:字符串类型。计算长度的字符串。

INSTR(arg1,arg2):找到一个给定字符的数字位置。

arg1:字符串类型。原字符串。

arg2:字符串类型。查找内容。

INSTR(arg1,arg2,arg3,arg4):指定查找位置以及出现的次数。

arg1:字符串类型。原字符串。

arg2:字符串类型。查找内容。

arg3:整数类型。开始位置。

arg4:整数类型。第几次出现。

LPAD(arg1,arg2,arg3):用给定的字符左填充字符串到给定的长度。

arg1:字符串类型。原字符串。

arg2:整数类型。总长度。

arg3:字符串类型。填充的子字符串。

RPAD(arg1,arg2,arg3):用给定的字符右填充字符串到给定的长度。

arg1:字符串类型。原字符串。

arg2:整数类型。总长度。

arg3:字符串类型。填充的子字符串。

516ff7d600db25b08c8e5bbd4c29c7c4.png

3.4.1示例一

显示所有工作岗位名称从第 4 个字符位置开始包含字符串 REP 的雇员的信息,将雇员的姓和名连接显示在一起,还显示雇员名的长度,以及名字中字母 a 的位置。

17b2906ec4a559a7ad203eddebbf4cda.png

3.4.2示例二

显示名字是以 n 结束的雇员的数据,将雇员的姓和名连接显示在一起,还显示雇员名的长度,以及名字中字母 a 的位置。

67433d85ac9d1d344bb780fb1a601551.png

3.4.3示例三

将手机号中间四位用星号代替。

b9d737ac57936e37ee51ea3b54a90275.png

3.5数字函数

ROUND(arg1,arg2):四舍五入指定小数的值。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数,可以是一个负数。负数则表示指定整数的位置。

ROUND(arg1):四舍五入保留整数。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数。

TRUNC(arg1,arg2):截断指定小数的值,不做四舍五入处理。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数,可以使一个负数。负数则表示指定整数的位置。

TRUNC(arg1):四舍五入保留整数。

arg1:数字类型。原数字。

arg2:整数类型。小数点保留的位数。

MOD(arg1,arg2):取余。

arg1:数字类型。被除数。

arg2:数字类型。除数。

3.5.1示例一

计算所有是销售代表(SA_REP)的雇员的工资被 5000 除后的余数。

8f4b061f8da4bc42ce2fafb7931e18ce.png

3.6日期处理

3.6.1日期的使用

3.6.1.1 SYSDATE 函数

SYSDATE 是一个日期函数,它返回当前数据库服务器的日期和时间。

3.6.1.2 用日期计算

• 从日期加或者减一个数,结果是一个日期值

• 两个日期相减,得到两个日期之间的天数

• 用小时数除以 24,可以加小时到日期上

3.6.2日期函数

MONTHS_BETWEEN(date1,date2):计算 date1 和 date2 之间的月数。其结果可以是正

的也可以是负的。如果 date1 大于 date2,结果是正的。反之,结果是负的。

date1:日期类型。

date2:日期类型。

ADD_MONTHS(date, n):添加 n 个日历月到 date。n 的值必须是整数,但可以是负的。

date:日期类型。

n:整数

NEXT_DAY(date, ‘char’):计算在 date 之后的下一个周(‘char’)的指定天的日期。char 的值可能是一个表示一天的数或者是一个字符串。如果使用数字表示星期,1 是从星期日开始。

数字范围为:1-7。

date:日期类型。

char:数字或字符串。

LAST_DAY(date):计算包含 date 的月的最后一天的日期。

date:日期类型。

9284dfe4680df8f20f25d9c4bb29ada9.png

ROUND(date,‘fmt’):返回用格式化模式 fmt 四舍五入到指定单位的 date ,如果格式模

式 fmt 被忽略,date 被四舍五入到最近的天。

date:日期类型。

fmt:字符串类型。

TRUNC(date, ‘fmt’):返回用格式化模式 fmt 截断到指定单位的带天的。如果格式模式

fmt 被忽略,date 被截断到最近的天。

date:日期类型。

fmt:字符串类型。

3.6.2.1.1示例一

查询所有受雇在 15 年 (180 个月) 以内的雇员的 employee_id,hire_date,显示他们已被雇用的月,从受雇日期开始加 6 个月的试用期后的日期,受雇日期后的第一个星期五是几号,以及受雇月的最后一天是几号。

b7b9a133fce68ac8fe99254b39de23a2.png

3.6.2.1.2示例二

查询受雇日期,找出 2002 年开始工作的哪些人。用 ROUND 和 TRUNC 函数显示开始的月份。

2eccdc6db87c1844d0242af241308bb8.png

3.7数据类型装换

85d8856f2f209d015dc7a0356f5832fd.png

3.7数据类型装换

3.7.1隐式数据类型转换

隐式转换:当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换。

3.7.1.1 对于直接赋值转换

7fc263370c721def35062dd3402efc43.png

3.7.1.2 对于表达式赋值

64e5ef156c543a2d8520f39e0351fda1.png

3.7.1.3 隐式转换的问题

1.影响性能 2不便于阅读

3.7.2显示数据类型转换

通过数据库中的转换函数完成数据类型的转换

3.7.3转换函数

07536a59ad0adef95176df28e96d8e1f.png

TO_CHAR(arg1,’fmt’):将一个日期或者数字转换为字符类型。带格式化样式 fmt。

arg1:数字或者日期类型。需要转换的数据。

fmt:转换格式。

3.7.3.1 to_char 日期转换

日期格式模板的元素

a4e6052bef3a0c0b8298191d65967ebd.png3.7.3.1.1示例

示例:

显示所有雇员的名字和受雇日期,受雇日期以 2007 年 8 月 10 日 12:00:00 AM 显示。

select last_name,to_char(hire_date,'yyyy" 年 "MM" 月"DD"日" HH:MI:SS AM') from employees;

3.7.3.2 to_char 数字转换

数字格式模板

8ff655ba9c6f76f3a49f6b47eba6befe.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值