Oracle学习(四)_SQL函数

--第一部分: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函数

时间: 2024-08-12 07:40:31

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

Oracle学习(四):组函数

1.知识点:可以对照下面的录屏进行阅读 SQL> --组函数类型:avg,count,max,min,sum SQL> --工资总额 SQL> select sum(sal) from emp; SQL> --员工人数 SQL> select count(*) from emp; SQL> --平均工资 SQL> select sum(sal)/count(*) 一, avg(sal) 二 from emp; SQL> --平均奖金的三种方式:二三方法一样,

ORACLE学习05-单行函数

一.字符函数 1,字符串转换 -- lower() 将字符串转成小写 select lower('HELLO WORLD') from dual;   -- upper() 将字符串转大写 select upper('hello world') from dual;   -- initcap() 将字符串首字母大写 select initcap('hEllo woRld') from dual; 2,字符串截取 -- substr(a,b) 从a中,第b位开始取,取右边所有的字符 select

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

单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数:这类函数改变字符的大小写. LOWER('SQL Course') sql course UPPER('SQL Course') SQL COURSE INITCAP('SQL Course') Sql Course 示例: SELECT employee_id, last_name, depart

oracle学习笔记单行函数

单行函数 只对一行进行变换  每行返回一个结果 单行函数分 字符.数值.日期.转换.通用 字符函数:大小写控制函数.字符控制函数 大小写控制函数:lower, upper, initcap 字符控制函数:concat,substr,length,instr,lpad|rpad,trim,replace lower,upper,initcap select lower('SQL') from dual; --结果 sql select upper('sql') from dual; --结果 SQ

oracle学习 四(持续更新中)

解决建立表的时候出现的 ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区 出现这个问题是因为表空间的大小不足,可以给他扩容这样的话也会多出来一个数据文件.具体写法如下: ALTER TABLESPACE 表空间的名字 ADD DATAFILE '表空间的路径' SIZE 1000M; 当查询表空间的路径的时候可以使用以下oracle自带的系统表查询 select * from dba_data_files where tablespace_name = 'USE

Oracle学习(三):单行函数

1.知识点:可以对照下面的录屏进行阅读 SQL> --字符函数 SQL> --字符串的转换 SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写 2 from dual; SQL> --substr(a,b) 从a中,第b位开始取,取右边所有的字符 SQL> select substr('Hello World',4) from dual; SQL&

Oracle学习(十四):管理用户安全

--用户(user) SQL> --创建名叫 grace 密码是password 的用户,新用户没有任何权限 SQL> create user grace identified by password; 验证用户: 密码验证方式(用户名/密码) 外部验证方式(主机认证,即通过登陆的用户名) 全局验证方式(其他方式:生物认证方式.token方式) 优先级顺序:外部验证>密码验证 --权限(privilege) 用户权限有两种: System:允许用户执行对于数据库的特定行为,例如:创建表.

Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

PL/SQL子程序 包括函数和过程.这里的函数指的是用户自己定义的函数,和系统函数是不同的.子程序一般是完成特定功能的PL/SQL程序块,并且具有一定的通用性,可以被不同的应用程序多次调用.Oracle提供可以把PL/SQL程序存储在数据库中,并可以再任何地方来运行它.这样就叫做存储过程或者是函数.过程和函数的唯一区别就是函数总是向调用者返回数据,而过程则不返回数据. 函数 如果用户要经常执行某些操作,并且需要返回特定的数据,那么就可以将这些操作构造成一个函数. 可以使用SQL语句定义函数. 基

Oracle学习-Power Designer、visio 2003、Oracle sql developer、OEM、expdp

Oracle的体系太庞大了.对于刚開始学习的人来说,难免有些无从下手的感觉. 经过一学期的学习对Oracle学习有了一些深入的了解,由于之前学习过Oracle的一些主要的知识.所以学习起来上手比較快一点. 这次Oracle项目让我又一次对Oracle的基本知识进行了运用,而且对软件project也有了新的认识.从需求分析.概念结构设计.逻辑结构设计.物理结构设计.数据库的建立和測试.数据库执行和维护. 尽管说数据库设计的周期比較长将近用了三周左右,可是每一步做的还是非常认真的对待.我选择的是舰队