oracle基础 第七篇 查询sql 之单行函数

10 篇文章 0 订阅
2 篇文章 0 订阅

单行函数:

操作数据对象。

接受参数返回一个结果。

只对一行进行变换 。

每行返回一个结果 。

可以转换数据类型 。

可以嵌套 。

参数可以是一列或一个值。

 

分别有:

字符函数。

数值函数。

日期函数。

通用函数。

转换函数。

 

字符函数:

1.大小写控制函数:

这类函数改变字符的大小写。有:

LOWER(lower)(将输出结果全换成小写)、

UPPER(upper)将输出结果全换成大写)、

INITCAP(initcap)(输出结果单词首字母大写

例如:

SELECT
	LOWER ('TeST JaVA'),
	UPPER ('TEST JAVA'),
	INITCAP ('TEST JAVA')
FROM
	dual;

输出结果:

应用:

SELECT
	last_name
FROM
	employees
WHERE
	LOWER (last_name) = 'king';

字符控制函数:

这类函数控制字符:

CONCAT(concat)(连接字符串)、

SUBSTR(substr)(截取字符串,注意:oracle的下标是从1开始算的)、

LENGHT(lenght)(输出字符串的长度)、

INSTR(instr)(判断某个字符在字符串当中首次出现的位置,如果不存在就返回0)、

LPAD(lpad)(按照位数输出一个字段的数据,不够在左边用 ' * ' ,' #' ...等或者空格补齐)、

RPAD(rpad)(按照位数输出一个字段的数据,不够在右边用 ' * ' ,' #' ...等或者空格补齐)、

TRIM(trim)(在字符串的首尾删除掉指定字符)、

REPLACE(replace)(用另外一个字符代替掉所有在字符串的指定字符)。

 

 

 

例如:

 SELECT
   CONCAT('Hello','World'),
   SUBSTR('Hello',2,3),
   LENGTH('Hello')
FROM
  dual;

输出结果:

 SELECT
  INSTR('hello world','o')
FROM
  dual;

输出结果:

 SELECT
  last_name,
  employee_id,
  LPAD(salary, 10, '#'),
  RPAD(salary, 10, '*')
FROM
  employees;

输出结果:

 SELECT
  TRIM('n' FROM 'nameNnameNamennn')
FROM
  dual;

输出结果:

数值函数:

ROUND(round): 四舍五入。

TRUNC(trunc):截断。

MOD(mod): 求余。

例如:

SELECT
	ROUND (456.456, 1),
	ROUND (456.456),
	ROUND (456.456, -1)
FROM
	dual;

输出结果:

 

SELECT
	TRUNC (456.456, 1),
	TRUNC (456.456),
	TRUNC (456.456, -1)
FROM
	dual;

输出结果:

 

SELECT
	mod(1500,400)
FROM
	dual;

输出结果:

日期

SYSDATE (非函数):返回系统日期和时间。

例如:

SELECT
	SYSDATE
FROM
	dual;

日期的数学运算:

在日期上加上或减去一个数字结果仍为日期。

两个日期相减返回日期之间相差的天数。 (两个日期不允许做加法运算,无意义 )

可以用数字除24来向日期中加上或减去天数。

 

例如:

SELECT
	SYSDATE,
	SYSDATE + 1,
	SYSDATE - 1
FROM
	dual;

 

输出结果:

 

SELECT
	employee_id,
  last_name,
  ROUND(sysdate-hire_date) as "就职时间天数"
FROM
	employees;

输出结果:

日期函数:

函数描述
MONTHS_BETWEEN(months_between)两个日期相差的月数
ADD_MONTHS(next_months)向指定日期中加上若干月数
NEXT_DAY(next_day)指定日期的下一个星期 * 对应的日期
LAST_DAY(last_day)本月的最后一天
ROUND(round)日期四舍五入
TRUNC (trunc)日期截断

 

 

 

 

 

 

 

 

例如:

SELECT
	employee_id,
	last_name,
	MONTHS_BETWEEN (sysdate, hire_date) AS "就职时间月数"
FROM
	employees;

输出结果:

 

SELECT
	SYSDATE,
	ADD_MONTHS (SYSDATE, 1),
	ADD_MONTHS (SYSDATE ,- 2),
	NEXT_DAY (SYSDATE, '星期一')
FROM
	employees;

输出结果:

 

SELECT
	last_name,
  hire_date
FROM
	employees
WHERE
   hire_date=last_day(hire_date);

输出结果:

SELECT
  ROUND(sysdate, 'month'),
  ROUND(sysdate, 'day'),
  TRUNC(sysdate, 'hh')
FROM 
  dual;

输出结果:

转换函数:

隐式数据类型转换:

源数据类型目标数据类型
VARCHAR2 or CHARNUMBER
VARCHAR2 or CHARDATE
NUMBERVARCHAR2
DATEVARCHAR2

 

 

 

 

 

 

例如:

SELECT
 sysdate,
 sysdate+'2'
FROM 
  dual;

输出结果:

显式数据类型转换:

TO_CHAR函数对日期的转换:

格式: 必须包含在单引号中而且大小写敏感

          可以包含任意的有效的日期格式。

           日期之间用逗号隔开

例如:

SELECT
	employee_id,
	hire_date
FROM
	employees
WHERE
	TO_CHAR (hire_date, 'yyyy-mm-dd') = '1994-08-17';

输出结果:

 

SELECT
	TO_CHAR (
		1234567.89,
		'999,999,999,99'
	)
FROM
	dual;

输出结果:

 

SELECT
	TO_CHAR (
		1234567.89,
		'$999,999,999,99'
	)
FROM
	dual;

 

输出结果:

 

SELECT
	TO_NUMBER (
		'$001,234,567.89',
		'$999,999,999.99'
	)
FROM
	dual;

 

输出结果:

 

日期格式的元素

YYYY2004
YEARTWO THOUSAND AND FOUR
MM02
MONTHJULY
MONJUL
DYMON
DAYMONDAY
DD02

 

 

 

 

 

 

 

 

 

时间格式

HH24:MI:SS AM15:45:32 PM

 

 

使用双引号向日期中添加字符:

DD "of" MONTH12 of OCTOBER

 

 

通用函数:

这些函数适用于任何数据类型,

同时也适用于空值:

NVL(nvl) (expr1, expr2) :将空值转换成一个已知的值,

expr1为字段,其本身若为null,则用expr2代替,否则用expr1本身的数值。

 

可以使用的数据类型有日期、字符、数字。

例如:

SELECT
	employee_id,
	last_name,
	salary * 12 * (1 + NVL(commission_pct,0)) as "年收入"
FROM
	employees;

 

SELECT
  last_name,
  nvl(to_char(department_id ,'999999'),'没有部门')
FROM
	employees;

NVL2(nvl2) (expr1, expr2, expr3): expr1(字段)不为NULL,返回expr2;为NULL,返回expr3。

例如:

SELECT
  last_name,
  commission_pct,
  nvl2(commission_pct,commission_pct,0)
FROM
	employees;

 

NULLIF (nullif)(expr1, expr2) :expr1和expr2相等返回null,不等返回expr1。

COALESCE (coalesce)(expr1, expr2, ..., exprn):COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。 如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。

 

条件表达式

在 SQL 语句中使用IF-THEN-ELSE 逻辑

使用两种方法:

CASE (case)表达式 。

DECODE(decode) 函数。

例如:

查询部门号为 10, 20, 30 的员工信息,

若部门号为 10, 则打印其工资的 1.1 倍,

20 号部门, 则打印其工资的 1.2 倍,

30 号部门打印其工资的 1.3 倍数。

 

SELECT
	employee_id,
	last_name,
	CASE department_id
WHEN 10 THEN
	salary * 1.1
WHEN 20 THEN
	salary * 1.2
ELSE
	salary * 1.3
END AS "根据条件打印的薪酬"
FROM
	employees
WHERE
	department_id IN (10, 20, 30);
SELECT
	employee_id,
	last_name,
	DECODE (
		department_id,
		10,
		salary * 1.1,
		20,
		salary * 1.2,
		salary * 1.3
	) AS "根据条件打印出来的薪酬"
FROM
	employees
WHERE
	department_id IN (10, 20, 30);

 

 

 

参考来自尚硅谷

               

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风而行无疾而歌

看官,觉得不错,奖励一下呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值