--第一部分:SQL基础
--ch1 简单查询
--ch2 查询基本概念
--ch3 数据过滤 --第二部分:多表操作
--ch4 集合理论
--ch5 内连接
--ch6 外连接
--ch7 子查询 --第三部分:数据分组
--ch8 简单统计
--ch9 数据分组
--ch10 分组数据过滤 --第四部分:SQL函数
--ch11 内置函数
--ch12 case表达式 --第五部分:DML语句
--ch13 插入数据
--ch14 修改数据
--ch15 删除数据 --------------------------------------------------------------------------
--第四部分:SQL函数
【ch11 内置函数】
--11.1使用单行函数
/*
字符函数
数字函数
转换函数
日期函数
*/
--字符函数
--ascii(x)返回字符x的ascii码
SELECT ascii('a'), ascii('A'), ascii('z'), ascii('Z'), ascii(0), ascii(9)
FROM dual;
--chr(x)返回ascii码为x的字符
SELECT CHR(97),CHR(65),CHR(122),CHR(90) FROM dual;
--concat(x,y)将y附加在x上,并返回附加后的字符串
SELECT first_name,last_name,concat(first_name, last_name) allname FROM customers;
--initcap(x)将x中的每个单词的首字母转换为大写
SELECT product_id,description, initcap(description) ad
FROM products
WHERE product_id < 4;
--instr(x,find_str,star,occur)
--在x中查找字符串find_str,然后返回find_str所在的位置。
--start指定哪个位置开始查找,occur指定find_str出现的次数
SELECT NAME, instr(NAME, 'Science') FROM products WHERE product_id = 1;
SELECT NAME, instr(NAME, 'e', 1, 2) FROM products WHERE product_id = 1;
--可用于日期
SELECT customer_id ,dob,INSTR(dob,'01') FROM customers WHERE customer_id = 1;
--可以指定occur为负数,表示从字符串尾部开始向左查找
SELECT NAME, instr(NAME, 'n', -2, 2) FROM products WHERE product_id = 1;
--length(x)返回x中字符的个数
SELECT NAME, length(NAME) FROM products;
--lower(x)将x中的字母转换为小写
--upper(x)将x中的字母转换为大写
SELECT first_name,upper(first_name), last_name,lower(last_name) FROM customers;
--lpad(x,width,pad_str)在x的左边补齐pad_str字符使得其长度为width
--rpad(x,width,pad_str)在x的右边补齐pad_str字符使得其长度为width
SELECT name,rpad(NAME, 30, '.'),price, lpad(price, 8, '*+')
FROM products
WHERE product_id < 4;
--ltrim(x,trim_str)从x中的左边截去一些字符,直到x中有字符不出现在trim_str中为止
--rtrim(x,trim_str)从x中的右边截去一些字符,直到x中有字符不出现在trim_str中为止
--trim(leading|trailing|both y from x)从x中截去单个字符y
SELECT ltrim(' Hello Gail Seymour!'),
rtrim('Hi doreen Oakley!abcabc', 'akb!c'),
TRIM(TRAILING '0' FROM '000Hey Steve Button!00000')
FROM dual;
--nvl(x,value)若x为空,则返回value,否则返回x
--nvl2(x,v1,v2)若x为空,则返回v2,否则返回v1
SELECT customer_id,
phone,
nvl(phone, 'Unkown phone number'),
dob,
nvl(dob, SYSDATE),
phone,
nvl2(phone, 'Known', 'Unknown')
FROM customers; --replace(x,search_str,replace_str)在x中查找search_str,并将其替换为replace_str
SELECT name,REPLACE(NAME, 'Science', 'Physics')
FROM products
WHERE product_id = 1; --substr(x,start,length)返回x中的一个子字符串,子字符串从start开始,子字符串长度为length
SELECT name, substr(NAME, 2, 7), substr(NAME, -5, 2)
FROM products
WHERE product_id < 4; --11.2函数组合
SELECT NAME, upper(substr(NAME, 2, 8)) FROM products WHERE product_id < 4; --11.3数字函数
--abs(x)返回x的绝对值
SELECT ABS(-1.222) FROM dual;
SELECT product_id, price, price - 30, abs(price - 30)
FROM products
WHERE product_id < 4;
--ceil(x)返回大于或等于x的最小整数
SELECT ceil(5.8), ceil(-5.2) FROM dual;
--floor(x)返回小于或等于x的最大整数
SELECT floor(5.8), floor(-5.2) FROM dual;
--mod(x,y)返回x除以y的余数
SELECT MOD(8, 3), MOD(8, 4) FROM dual;
--power(x,y)返回x的y次幂
SELECT POWER(2,3) FROM dual;
--round(x,y)返回对x进行取整的结果:若y不指定,对小数点后第一位四舍五入,若y>0,对第y+1位小数四舍五入;若y<0,对小数点左边的y位四舍五入
SELECT round(5.75), round(5.75, 1), round(15.75, -1) FROM dual;
--sign(x)返回x的符号。若x<0,返回-1;若x=0,返回0;若x>0,返回1
SELECT sign(-5), sign(0), sign(5) FROM dual;
--trunc(x,y)用于计算对x进行截断的结果:若y不指定,对小数点后第一位截断,若y>0,对第y+1位小数截断;若y<0,对小数点左边的y位截断
SELECT trunc(5.75), trunc(5.76, 1), trunc(15.75, -1) FROM dual; --11.4转换函数
--to_char(x,format)用于将x转换为一个字符串。可以用format指定格式
SELECT to_char(123.456) FROM dual;
SELECT to_char(12345.67, '99,999.99') FROM dual;
--to_number(x,format)用于将x转换为一个数字。可以用format指定格式
SELECT to_number('9455.335') FROM dual;
SELECT to_number('-$12,345.67', '$99,999.99') FROM dual;
--使用to_char()和to_date()转换时间值
--to_char(x,format)将数字或时间值x转换为字符串。
--to_date(x,format)将字符串x转换为date类型
--使用to_char()将时间值转换为字符串
SELECT sysdate,to_char(SYSDATE,'yyyy-mm-dd') FROM dual; SELECT customer_id, to_char(dob, 'MONTH DD,YYYY') FROM customers; SELECT to_char(SYSDATE,'MONTH DD,YYYY,HH24:MI:SS') FROM dual;
/*常用format参数
YYYY四位年份
MM二位月份
MONTH月份的全拼,全部大写
MON月份的前3个字母
WW本年中的第几周
W本月中的第几周
DD本月中的第几天
D本周中的第几天
DAY周几的全名,全部大写
HH24 24小时格式小时数
HH 12小时格式小时数
MI分钟
SS秒数
FF[1..9]带有小数的秒数
分隔符:-/,.;: "text"
*/
SELECT to_char(SYSDATE,'D') FROM dual; --使用to_date()将字符串转换为时间值
SELECT to_date('5月 2,2006', 'month dd,yyyy') FROM dual;
SELECT to_date('20120808','yyyy-mm-dd') FROM dual; --11.5使用时间值函数
--add_months(x,y)返回x加上y个月后的结果,若y为负值,则从x中减去y个月
SELECT add_months(SYSDATE, 3), add_months(trunc(SYSDATE), -3) FROM dual;
--last_day(x)返回包含x月的最后一天
SELECT last_day(DATE'2012-12-1') FROM dual;
--months_between(x,y)返回x和y之间有几个月,如果x比y晚,就返回正数,否则为负数
SELECT months_between(SYSDATE + 1000, SYSDATE) FROM dual;
--next_day(x,day)返回从x开始,下一个day的时间值
SELECT next_day(DATE'2012-5-23','星期一') FROM dual;
SELECT next_day(DATE'2012-5-23',2) FROM dual;
--round(x,unit)对x进行取整。
SELECT round(SYSDATE, 'YYYY') FROM dual;
SELECT round(SYSDATE, 'MM') FROM dual;
--sysdate()返回数据库所在操作系统中当前设置的时间值
SELECT SYSDATE FROM dual;
--trunc(x,unit)对x进行截断。
/*
YYYY四位年份
MM二位月份
WW本年中的第几周
W本月中的第几周
DD本月中的第几天
D本周中的第几天
HH24 24小时格式小时数
HH 12小时格式小时数
MI分钟
*/
SELECT trunc(SYSDATE, 'Y') FROM dual;
SELECT trunc(SYSDATE, 'MM') FROM dual;
SELECT SYSDATE+7,trunc(SYSDATE+7, 'W') FROM dual;
SELECT trunc(SYSDATE, 'DD') FROM dual;
SELECT trunc(SYSDATE+7, 'D') FROM dual;
SELECT trunc(SYSDATE, 'HH') FROM dual;
SELECT trunc(SYSDATE, 'MI') FROM dual;
--11.6使用translate()函数
--translate(x,from_str,to_str)函数在x中查找from_str中的字符,并将其转换成to_str中对应的字符
SELECT product_id,
NAME,
translate(NAME,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'EFGHIJKLMNOPQRSTUVWXYZABCDefghijklmnopqrstuvwxyzabcd')
FROM products; SELECT translate('I am Chinese, I love China', 'China', '中国') "Translate example"
FROM dual; SELECT translate('我是中国人,我爱中国', '中国', 'China') "Translate example"
FROM dual; --11.7使用decode()函数
--decode(value,search_value,result,default_value)对value与search_value进行比较。如果这两个值相等
--则返回result,否则返回default_value
--相当于在SQL中执行if语句
SELECT DECODE(1,1,2,3) FROM dual;
SELECT DECODE(1,2,1,3) FROM dual;
SELECT prd_id,
available,
decode(available,
'Y',
'Product is available',
'Product is not available')
FROM more_products;
--可以向decode传递多个参数
SELECT product_id,
product_type_id,
decode(product_type_id,
1,
'Book',
2,
'Video',
3,
'DVD',
4,
'CD',
'Magazine')
FROM products; 【ch12 case表达式】
--与decode类似,相当于在SQL中执行if语句
CASE 表达式有两种格式: CASE 简单表达式,它通过将表达式与一组简单的表达式进行比较来确定结果。
CASE 搜索表达式,它通过计算一组逻辑表达式来确定结果。 这两种格式都支持可选的 ELSE 参数。 CASE 可用于允许使用有效表达式的任意语句或子句。
例如,可以在 SELECT、UPDATE、DELETE 和 SET 等语句以及 select_list、IN、WHERE、ORDER BY 和 HAVING 等子句中使用 CASE。 --case简单表达式:
CASE input_expression
WHEN when_expression1 THEN result_expression1
WHEN when_expression2 THEN result_expression2
...
[ ELSE else_result_expression ]
END SELECT product_id,
product_type_id,
CASE product_type_id
WHEN 1 THEN
'Book'
WHEN 2 THEN
'Video'
WHEN 3 THEN
'DVD'
WHEN 4 THEN
'CD'
ELSE
'Magazine'
END casen
FROM products; --使用case搜索表达式
CASE
WHEN Logical_expression1 THEN result_expression1
WHEN Logical_expression2 THEN result_expression2
...
[ ELSE else_result_expression ]
END SELECT product_id,
product_type_id,
CASE
WHEN product_type_id = 1 THEN
'Book'
WHEN product_type_id = 2 THEN
'Video'
WHEN product_type_id = 3 THEN
'DVD'
WHEN product_type_id = 4 THEN
'CD'
ELSE
'Magazine'
END casen
FROM products;

Oracle学习(四)_SQL函数的更多相关文章

  1. Oracle学习(四):组函数

    1.知识点:能够对比以下的录屏进行阅读 SQL> --组函数类型:avg,count,max.min,sum SQL> --工资总额 SQL> select sum(sal) fro ...

  2. Oracle学习笔记—常用函数

    这里记录一些oracle常用的函数. TO_NUMBER()函数 将字符串类型转换成一个 number 类型的值. SELECT TO_NUMBER('100.00') FROM DUAL; TO_C ...

  3. Oracle学习笔记——常用函数总结

    在平时写PL/SQL的时候,经常要用到很多系统自带的函数,而这些函数用起来非常好用,但是每次用完以后,就又忘到脑后了,为了加深自己的映象,以及对这些函数做一个全面的总结,就有了今天这篇文章. 首先这就 ...

  4. Oracle系列四 单行函数查询语句

    单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数: ...

  5. oracle学习 四(持续更新中)无法为表空间 MAXDATA 中的段创建 INITIAL 区

    解决建立表的时候出现的 ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区 出现这个问题是因为表空间的大小不足,可以给他扩容这样的话也会多出来一个数据文件.具体写法如下 ...

  6. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  7. day 83 Vue学习四之过滤器、钩子函数、路由、全家桶等

    Vue学习四之过滤器.钩子函数.路由.全家桶等   本节目录 一 vue过滤器 二 生命周期的钩子函数 三 vue的全家桶 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 Vue的过滤 ...

  8. 《ORACLE数据库管理与开发》第三章学习之常用函数记录

    <ORACLE数据库管理与开发>第三章学习之常用函数记录 注:文章中的*代表所要操作的列名 1.lower(*)/upper(*),将此列下的值转为小写/大写 2.initcap(*):把 ...

  9. Oracle学习笔记:trunc函数

    在Oracle中可以使用trunc函数进行日期截取和数字截取,具体使用方法如下: 1.trunc(for dates) 日期截取 语法:trunc(date,[fmt]) select trunc(s ...

  10. Oracle学习笔记:wm_concat函数合并字段

    在Oracle中使用wm_concat(column)可以实现字段的分组合并,逗号分隔. 例如,现有表temp_cwh_test: -- 创建临时表 create table temp_cwh_tes ...

随机推荐

  1. mac 配置homebrew

    1.终端下输入export PATH=/usr/local/bin:$PATH 2.echo $PATH 3.安装homebrew  地址:ruby -e "$(curl -fsSL htt ...

  2. js判断数组中是不是有某个元素

    function in_array(search,array){ for(var i in array){ if(array[i]==search){ return true; } } return ...

  3. canal入门Demo

    关于canal具体的原理,以及应用场景,可以参考开发文档:https://github.com/alibaba/canal 下面给出canal的入门Demo (一)部署canal服务器 可以参考官方文 ...

  4. apache2反向代理

    1.安装 Apache2 sudo apt-get install apache2 2.重启服务器 sudo /etc/init.d/apache2 restart 3.虚拟主机配置 启用这几个模块 ...

  5. MyBatis动态sql之${}和#{}区别

    前言 ​ 接触mybatis也是在今年步入社会之后,想想也半年多了,缺没时间去系统的学习,只知道大概,也是惭愧. ​ 不知道有多少刚毕业的同学和我一样,到现在还没仔仔细细去了解你每天都会见到使用到的框 ...

  6. 深入理解php内核

    目录 第一部分 基本原理 第一章 准备工作和背景知识 第一节 环境搭建 第二节 源码布局及阅读方法 第三节 常用代码 第四节 小结 第二章 用户代码的执行 第一节 PHP生命周期 第二节 从SAPI开 ...

  7. Lunx下 怎样启动和关闭oracle数据库

    1.因为oracle运行在Linux系统下,首先,要连接Linux系统 2.切换到oracle安装用户下. 我的是 ora12. 3.运行oracle的环境变量, 以便输入相关命令. 4.进入orac ...

  8. MSSQL2012中SQL调优(SQL TUNING)时CBO支持和常用的hints

    虽然当前各关系库CBO都已经非常先进和智能,但因为关系库理论和实现上的限制,CBO在特殊场景下也会给出次优甚至存在严重性能问题的执行计划,而这些场景中,有一部分只能或适合通过关系库提供的hints来进 ...

  9. js正则表达式 replace替换url的参数

    /* 定义替换对象键值 */var setReferArgs = function(){    var referArgs = new Object();    referArgs['#userID\ ...

  10. windows开机锁定小键盘

    1.启动注册表编缉器 按下windows+R键,输入regedit回车启动注册表编缉器 2.修改注册表默认值 展开HKEY_USERS\.DEFAULT\Control Panel\Keyboard将 ...