第3节-单行函数

合集下载

4、单行函数

4、单行函数

SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name) length FROM employees WHERE SUBSTR(job_id, 4) = 'ACCOUNT' AND INSTR(last_name, 'e')>0;

where字句的使用 order by 字句的使用 逻辑运算符、特殊逻辑运算符 比较运算符
知识点 字符函数 数值函数 日期函数 转换函数 通用函数 函数嵌套
内容
掌握程度 重点
重点
输入
参数 1
函数 函数执行作用
输出
参数 2 结果值
参数n

函数类型
Functions
单行函数
多行函数
结果 GoodString Str 6 3 ******5000 5000****** MITH adc

查找公司员工编号,用户名(first_name与last_name连 接成一个字符串),职位编号及last_name的长度,要求 职位从第四位起匹配'ACCOUNT',同时last_name中至 少包含一个’e’字母。

常用日期格式(续)
◦ DY:星期的英文前三位字母; ◦ DAY:星期的英文拼写;
◦ D:数字表示一星期的第几天,星期天是一周的第一天。
◦ DD:数字表示一个月中的第几天; ◦ DDD:数字表示一年中的第几天。

常用时间格式
◦ AM 或PM:上下午表示; ◦ HH 或HH12或HH24:数字表示小时。HH12代表12小 时计时,HH24代表24小时计时; ◦ MI:数字表示分钟;

Les03-处理单行的函数

Les03-处理单行的函数

使用 TRUNC函数
SQL> SELECT TRUNC(45.923,2), TRUNC(45.923), 2 TRUNC(45.923,-1) 3 FROM DUAL;
TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1) --------------- ------------- --------------45.92 45 40
The return date is in the century before the current one The return date is in the current century
RR日期格式示例
使用RR日期格式查找1990年之前入职 的员工,不管执行命令的时间是1999 年或者2000年以后查找
VARCHAR2 VARCHAR2
隐式数据类型转换
对于表达式的计算, Oracle服务器可以自动进行下 列转换:
From VARCHAR2 or CHAR To NUMBER
VARCHAR2 or CHAR
DATE
显式数据类型转换
TO_NUMBER TO_DATE
NUMBER
CHARACTER
ENAME ---------MARTIN ALLEN TURNER WARD CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A') ------------------- ------------- ---------------MARTINSALESMAN 6 2 ALLENSALESMAN 5 1 TURNERSALESMAN 6 0 WARDSALESMAN 4 2

07 Oracle基础 - 单行函数

07 Oracle基础 - 单行函数
范例:从“I am a good man!”中截取“good”。 select substr(‘I am a good man!’,8,4) from dual; 注意:SUBSTR()函数索引从1开始,即使设为0,也是作为1处理。
字符串截取函数
SUBSTR()函数不仅可以从左往右,也可以从右往左。 范例:截取每位雇员的前三位字符。 Select ename,substr(ename,0,3) from emp;
函数分类
根据函数的特定功能,可以分为以下几种: 1. 2. 3. 4. 5.
字符串函数 数值函数 日期函数 转换函数 通用函数
ORACLE函数有几万个,大家如果想了解更多的函数可 以上官网上下载学习。
字符串函数
字符串函数可以针对 于字符串数据进行处理,在


ORACLE中此类函数定义有如下几种(不区分大小写): UPPER() 全部转成大写 LOWER() 全部转成小写 INITCAP() 首字母大写 REPLACE() 替换字符 LENGTH() 字符长CHAR()函数
可以进一步探索TO_CHAR()好处,它可以实现年、月、
日的拆分。 范例:查询出每个雇员的编号、姓名、雇佣年份
范例:查询出所有在2月雇佣的雇员信息
Oracle中实际上提供有数据类型的自动转换,如果发现比
较的类型不统一,在一定的范围内它是可以转换的。
TO_CHAR()函数
日期-日期=天数
范例:计算每一位雇员到今天为此的雇佣天数。 Select ename,hiredate,sysdate-hiredate from emp; 通过以上的结果分析发现,如果现在只是依靠天数实
际 上是很难得到一个准确的年或月。所以为了精确的 计算,在ORACLE中提供有日期处理函数,利用这些 函数可以避免闰年和闰月的问题。

Chapter3 单行函数

Chapter3 单行函数

OCP-007-Chapter3 单行函数目的完成这一章,可以作下列事情:描述SQL中可用的不同函数类型在select语句中使用字符、数字和日期函数描述转换函数的应用函数是SQL非常有用的特性,可以实现下列功能:执行数据的计算编辑单独的数据项操作多行的输出(Manipulate output for groups of rows)格式化日期和数字的显示转换数据类型SQL函数有时候需要参数,但是总会返回一个值;过程主要是完成一个事件单行函数:操作数据项;接受参数并返回一个值;作用于每一个返回的行;每行返回一个结果;可能会改变数据类型;可以嵌套;可以使用用户定义的常量、变量值、列名或者表达式作为参数单行函数分为字符函数、数字函数、日期函数、转换函数和一般函数,可以在select, wher e, order by子句中使用一般函数:NVL,NVL2,NULLIF,COALSECE,CASE,DECODE字符函数接受字符数据,返回字符或者数字。

字符函数分为大小写转换函数(Lower, Upp er, Initcap首字目大写)和字符串操作函数(concat, substr, length, instr, lpad/rpad, trim, replace)。

SUBSTR(column|expression,m[,n])->返回从m开始的n个字符;若m为负值,则从末尾开始数mINSTR(column|expression,'string', [,m], [n] )->从m位置开始寻找第n个string字符(串)(缺省m,n为1)LPAD/RPAD(column|expression, n,'string')->扩展到n个字符宽,不足部分使用string字符添加TRIM(leading|trailing|both, trim_character FROM trim_source)->删除前导字符串,如果后面的trim_character和trim_source都是literal字符串,一定要使用单引号包围起来REPLACE(text,search_string,replacement_string)->替换CONCAT('Hello', 'World') -> HelloWorldSUBSTR('HelloWorld',1,5) -> HelloLENGTH('HelloWorld') -> 10INSTR('HelloWorld', 'W') ->6LPAD(salary,10,'*') -> *****24000RPAD(salary, 10, '*') -> 24000*****TRIM('H' FROM 'HelloWorld') -> elloWorld数字函数:Round圆整,Trunc截断,Mod取模->其中Round, Trunc也可以用于日期函数ROUND(column|expression, n)->四舍五入到n为小数,如果n为负值,则从小数点向左边数round(345.23,-3)=0; round(345.23,-2)=300; round(345.23,-1)=350; round(345.23)=345 TRUNC(column|expression,n)->截断到n为小数,如果n为负值,则从小数点向左边数trunc(345.23,-3)=0; trunc(345.23,-2)=300; trunc(345.23,-1)=340; trunc(345.23)=345测试函数或者计算结果时可以使用dual这个虚假的表SELECT ROUND(45.923,2), ROUND(45.923,0),ROUND(45.923,-1)FROM DUAL;Oracle数据库内部以下列方式存储日期:世纪,年,月,日,小时,分,秒,缺省的日期格式为DD-MON-RR当插入日期函数时,世纪值自动从sysdate函数(返回当前数据库服务器的日期和时间)取得允许的日期和数字的操作:date + number, date - number, date - date, date + number/24日期函数:MONTHS_BETWEEN(date1, date2)->两个日期间的月份,注意月份为中文的情况ADD_MONTHS(date, n)->添加月份NEXT_DAY(date, 'char')->找到下一个星期几(可以为数字或者字符串)LAST_DAY(date)->发现包含date所在月份的最后一天ROUND(date[,'fmt'])->圆整到格式中所指定的单位,省略的话圆整到最近的天TRUNC(date[, 'fmt'])->截断到格式中所指定的单位,省略的话截断到最近的天假定SYSDATE = '25-JUL-95':• ROUND(SYSDATE,'MONTH') -> 01-AUG-95• ROUND(SYSDATE ,'YEAR') -> 01-JAN-96• TRUNC(SYSDATE ,'MONTH') -> 01-JUL-95• TRUNC(SYSDATE ,'YEAR') -> 01-JAN-95转换函数隐式转换和显式转换(data type to data type)尽管隐式转换可以使用,推荐使用显式转换以使得SQL语句更可靠隐式转换:VARCHAR OR VARCHAR2 -> NUMBER; VARCHAR OR VARCHAR2 -> DATENUMBER -> VARCHAR2; DATE -> VARCHAR2显式转换:TO_CHAR(number|date,[ fmt],[nlsparams])TO_NUMBER(char,[fmt],[nlsparams])TO_DATE(char,[fmt],[nlsparams])The nlsparams parameter specifies the following characters, which are returned by number format elements:·Decimal character·Group separator·Local currency symbol·International currency symbolTO_CHAR(date, 'format_model')->格式模式是大小写敏感的,必须使用单引号包围,一定要使用逗号把格式和日期值间隔开来,使用fm可以把前面的空格或者零压缩掉日期格式模式:CC (世纪),YYYY,YYY,YY,Y(四个数字表示的年份;分别表示使用4位、后3位、后两位和后一位来表示年份),YEAR(拼写的年份),Q(季节),MM(两个数字表示的月份),MONTH(月份全名,九个字符长),MON(月份的三字缩写),RM(罗马数字表示的月份),WW(一年的第几个星期),W(月份的第几个星期),DY(星期的三字缩写),DAY(星期全称,九个字符长),DDD(一年的第几天),DD(一个月的第几天),D(一星期的第几天)BC,B.C.,AM,A.M.,HH,HH12,HH24,MI,SS,SSSSS(午夜过后的秒数)HH24:MI:SS AM -> 15:45:32 PM; DD "of" MONTH -> 12 of OCTOBER;/.,"of the" -->标点和引用的字符会在日期中原样输出DDspth -> fourteenth;DDth -> 4th;DDsp -> fourSELECT last_name,TO_CHAR(hire_date, 'fmDD Month YYYY') HIREDATEFROM employees;TO_CHAR(number, 'format_model')9:代表数字0:强制显式0 $:显示$符号L:显示本地货币符号 .:打印小数点,:显示千位的分隔符当值大于给定格式的位数时,Orale数据库会把整个数字显式为#TO_DATE(char[, 'format_model']) ->有个fx限制符,使用后必须精确的匹配,包括前后的空格个数RR日期格式:________|_____给定年份_________________当前年份|____0~49___|____50~99_______0~49___|___Current__|____Before_______50~99__|____Next____|____Current______单行函数可以嵌套任意层,从最内层开始计算SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date, 6), 'FRIDAY'),'fmDay, Month DDth, YYYY')"Next 6 Month Review"FROM employeesORDER BY hire_date;一般函数可以使用任何数据类型,并且可以使用NULLNVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,原样返回。

单行函数3解读

单行函数3解读

3
… 1 2 3
使用 COALESCE 函数
• COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。 • 如果第一个表达式为空,则返回下一个表达式, 对其他的参数进行COALESCE 。
使用 COALESCE 函数
SELECT last_name, COALESCE(commission_pct, salary, 10) comm FROM employees ORDER BY commission_pct;
使用NVL函数
1 SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL FROM employees; 2

1 2
exp1 != null ? exp2 : exp3
• 使用 TO_NUMBER :
TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’) from dual
通用函数
这些函数适用于任何数据类型,同时也适用于 空值: • NVL (expr1, expr2) • NVL2 (expr1, expr2, expr3) • NULLIF (expr1, expr2) • COALESCE (expr1, expr2, ..., exprn)

条件表达式
• 在 SQL 语句中使用IF-THEN-ELSE 逻辑 • 使用两种方法:
– CASE 表达式 – DECODE 函数
CASE 表达式
在需要使用 IF-THEN-ELSE 逻辑时:

单行函数——精选推荐

单行函数——精选推荐

单⾏函数所谓的单⾏函数指的就是完成某⼀具体功能的操作函数,例如:转⼤⼩写等。

⼀般⽽⾔,单⾏函数的格式:返回值函数名称(参数)。

单⾏函数分为以下⼏种:字符串函数、数值函数、⽇期函数、转换函数、通⽤函数。

1.字符串函数字符串函数是处理字符串数据的(对于字符串的数据有可能是从列上找到的,或者是直接设置的字符串常量)。

包含的函数有如下⼏种:No函数名称返回类型描述1 UPPER(列|字符串)字符串将传⼊的字符串变成⼤写形式2 LOWER(列|字符串)字符串将传⼊的字符串变成⼩写形式3 INITCAP(列|字符串)字符串开头⾸字母⼤写,其他的字母变为⼩写4 LENGTH(列|字符串)数字取得指定字符串的长度5SUBSTR(列|字符串,开始索引,[长度])字符串进⾏字符串的截取,如果没有设置长度,表⽰从截取全部6REPLACE(列|字符串,旧内容,新内容)字符串将指定的字符串数据以新数据替换旧数据范例:在Oracle⾥⾯,所有的函数如果要想进⾏验证,也必须编写SQL语句。

为了⽅便⽤户进⾏⼀些验证或者是⼀些不需要查询表的查询操作,专门提供了⼀个dual的虚拟表。

1.转⼤写⼩写操作 1)转⼤写SELECT UPPER('hello') FROM dual; 2).将所有姓名转⼩写SELECT LOWER(ename) FROM emp;⼀般在⼀些不区分数据⼤⼩写的情况都会同意的将所有的内容转成⼤写或⼩写的形式处理。

2.⾸字母⼤写其他字母⼩写 1)将所有的雇员姓名以⾸字母⼤写的形式保存SELECT INITCAP(ename) FROM emp;3.取得字符串的长度 1)基础操作SELECT LENGTH('ddffgg') FROM dual; 2)查询雇员姓名长度为5的全部雇员信息SELECT * FROM emp WHERE LENGTH(ename)=5;4.字符串截取 1)验证函数SQL> SELECT SUBSTR('helloworld',6) FROM dual;SUBSTR('HE----------worldSQL> SELECT SUBSTR('helloworld',0,5) FROM dual;SUBSTR('HE----------hello 在程序之中所有的字符串的⾸字母的索引都是0,但是在Oracle⾥⾯,所有的字符串的⾸字母索引都是1,如果设置的是0 ,那么它也会按照1的⽅式进⾏处理。

Les03_单行函数

Les03_单行函数

3-21
Copyright © 2004, Oracle. All rights reserved.
使用日期函数
假设 SYSDATE = '25-JUL-03':
函数 ROUND(SYSDATE,'MONTH') ROUND(SYSDATE ,'YEAR') TRUNC(SYSDATE ,'MONTH') TRUNC(SYSDATE ,'YEAR') 结果 01-AUG-03 01-JAN-04 01-JUL-03 01-JAN-03
SELECT last_name, hire_date FROM employees WHERE hire_date < '01-FEB-88';
3-16
Copyright © 2004, Oracle. All rights reserved.
处理日期
函数SYSDATE 返回:
• • 日期 时间
3-8
Copyright © 2004, Oracle. All rights reserved.
使用大小写处理函数
显示员工Higgins的信息:
SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'higgins'; no rows selected SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) = 'higgins';
1
2

cn03-使用单行函数

cn03-使用单行函数

使用日期函数
假定 SYSDATE = '25-JUL-03':
函数 ROUND(SYSDATE,'MONTH') ROUND(SYSDATE ,'YEAR') TRUNC(SYSDATE ,'MONTH') TRUNC(SYSDATE ,'YEAR') 结果 01-AUG-03 01-JAN-04 01-JUL-03 01-JAN-03
TO_NUMBER(char[, 'format_model'])
函数把字符串转换成日期: 用TO_DATE函数把字符串转换成日期 函数把字符串转换成日期
TO_DATE(char[, 'format_model'])
通用函数
以下函数可以用于任何数据类型: 以下函数可以用于任何数据类型 NVL (expr1, expr2) NVL2 (expr1, expr2, expr3) NULLIF (expr1, expr2) COALESCE (expr1, expr2, ..., exprn)
… …
DECODE 函数
显示每位员工的个人所得税应缴比例: 显示每位员工的个人所得税应缴比例
SELECT last_name, salary, DECODE (TRUNC(salary/2000, 0), 0, 0.00, 1, 0.09, 2, 0.20, 3, 0.30, 4, 0.40, 5, 0.42, 6, 0.44, 0.45) TAX_RATE FROM employees WHERE department_id = 80;
练习 3: 部分 2
本练习包含以下内容: 本练习包含以下内容 写一个查询语句,使用日期,字符和数值函数 写一个查询语句,使用日期, 使用多个函数,函数嵌套 使用多个函数, 用字符函数写一个查询语句,使得运行结果和职员名字 用字符函数写一个查询语句, 的大小写无关 查询职员的入职年限,显示几年几个月 查询职员的入职年限,

单行函数

单行函数

复习Scott: tigerSystem: managerSys:change_on_installSqlplus:Sqlplusw:Select {distinct} * |From 表名Where 条件表达对结果进行排序(ORDER BY子句)(重点)在SQL中可以使用ORDER BY子句对查询结果进行排序语法:SELECT {DISTINCT}* | 具体的列别名FROM 表名{ WHERE 条件表达式}{ORDER BY 排序的字段1 ASC|DESC, 排序的字段2 ASC|DESC }其中:ASC 升序,DESC 降序, 默认是升序例:按雇员的编号进行排序,此时,如果想对指定列排序,必须使用ORDER BY 语句,Select * from emp order by empno;例:要求按工资由低到高排序Select * from emp order by sal asc;例:要求查询部门编号为10部门的所有雇员信息,要求按照工资由高到低排序,如果工资相等,则按照雇佣日期由早到晚排序Select * from empWhere deptno = 10Order by sal desc ,hiredate asc;注:排序的操作肯定是放在整个SQL语句的最后执行练习1:查询促销人员的入职日期,要求按照工资由高到低排序Select ename,job,hiredate,SAL from emp where job=’SALESMAN’order by sal desc;练习2:查询部门为30的促销人员,并按入职日期由晚到早排序SELECT * FROM EMPWHERE DEPTNO=30 AND JOB=’SALESMAN’ORDER BY HIREDATE DESC;练习3:查询领导编号为7698的雇员信息,并按编号由低到高排序SELECT * FROM EMPWHERE MGR=7698ORDER BY EMPNO ASC;练习4:查询工资超过1500的促销人员的并且按照工资由高到低排序,如果工资相等,则按照姓名排序SELECT * FROM EMPWHERE SAL>1500 AND JOB=’SALESMAN’ORDER BY SAL DESC ,ENAME单行函数(重点)在数据库系统中,每个数据库之间的唯一不同的最大区别就是对函数的支持一单行函数语法:function_name( column | expression,[arg1,arg2,…..])函数名(数据库列名|字符串或计算表达式,[参数1,参数2]), 二单行函数的分类1 字符函数:接受字符输入并且返回字符或数值2 数值函数:接受数值输入并返回数值3 日期函数:操作日期型数据4 转换函数:从一种数据类型转换为另一种数据类型5 通用函数:NVL DECODE 函数Dual: 临时表三字符函数UPPER(列名|字符串):将字符转换为大写LOWER(): 将字符串转换为小写INITCAP(): 将单词首字母大写练习1:雇员姓名要求首字母大写,并且显示‘雇员姓名’,工作职位要求以小写字母显示,要求查询‘clerk’的信息Select 列from 表名where 从行上选择select initcap(ename) as as 雇员姓名, lower(job)from empwhere job=upper('clerk');CONCAT(字串1,字串2 ):字符串连接不如|| 好用SUBSTR(字符串,起始位置,长度):字符串截取,注:起始位置如果为负数,证明是从后面指定位置截取Substr(‘hello’,2,1): e Substr(‘hello’,-2,1) :lLENGTH():求串长REPLACE(字符串,等替换的字符串,替换的字符串): 内容替换INSTR(字符串,子串):查找子串, 返回子串第一个字符的位置,没有返回0LPAD(字段名,长度,填充的字符):返回指定长度的字符串,若不足长度在字符串左边添写填充字符RPAD(字段名,长度,填充的字符):返回指定长度的字符串,若不足长度在字符串右边添写填充字符TRIM(’替换字符’from 字符串):字符串两端替换指定的字符LTRIM(字符串,替换字符)左替换RTRIM()右替换面试:在做字符串截取时,是从0开始还是从1开始?都可以,Oracle自动判断练习2:取员工姓名的后三个字符select ename, substr(ename,length(ename)-2,3) from emp;select ename,substr(ename,-3,3) from emp;四数值函数ROUND(数据,保留的数位) :四舍五入取数据TRUNC(数据,保留的数位) : 截断数据,无四舍五入功能MOD():求佘五日期函数日期操作的规律:日期+/- 数字= 日期日期- 日期= 数字(天数)获得当前系统日期:sysdate例:显示10部门员工进入公司的星期数求距离现在多少天:当前日期-雇佣天数= 天数Select sysdate-hiredate from emp;求星期数:天数/7 =星期数Select (sysdate-hiredate)/7 from emp;Select ename,hiredate, ROUND((sysdate-hiredate)/7) 星期from emp;Select ename,hiredate, TRUNC((sysdate-hiredate)/7) +1 星期from emp;日期运算函数months_between:表示两个日期的月份之差add_months:表示给指定的日期加一个月数next_day:表示以当前时间为基准,下一个"目标日"的日期last_day:计算当前日期所在月的最后一天round:对日期进行四舍五入trnuc:表示对日期进行截取六转换函数to_char:函数将日期转换为字符类型to_NUMBER(): 转换为数字TO_DATE(): 转换为日期例:要求雇用日期的年月日分开显示七通用函数NVL: 将空值转换为指定值NVL(列名,替换的值)例:要求显示员工的年薪(年薪=(月薪+奖金)*12)select (sal+nvl(comm,0))*12 from emp;DECODE:含义解释:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)该函数的含义如下:Switch(条件)Case 值1:翻译值1Case 值2:翻译值2.。

mysql常见的聚合函数、单行函数

mysql常见的聚合函数、单行函数

mysql常见的聚合函数、单行函数聚合函数和单行函数是MySQL中常用的函数,用于在查询语句中进行数据处理和计算。

下面将介绍一些常见的聚合函数和单行函数,并提供一些示例来说明它们的用法和作用。

一、聚合函数:1. COUNT函数:用于统计某列的行数。

例如,统计一张表中有多少条记录:SELECT COUNT(*) FROM table_name;2. SUM函数:用于计算某列的总和。

例如,计算一张表中所有订单的总金额:SELECT SUM(amount) FROM orders;3. AVG函数:用于计算某列的平均值。

例如,计算一张表中学生的平均分数:SELECT AVG(score) FROM students;4. MAX函数:用于找出某列的最大值。

例如,找出一张表中最高的销售额:SELECT MAX(sales) FROM products;5. MIN函数:用于找出某列的最小值。

例如,找出一张表中最低的温度:SELECT MIN(temperature) FROM weather;二、单行函数:1. UPPER函数:将字符串转换为大写。

例如,将一个人的名字转换为大写:SELECT UPPER(name) FROM person;2. LOWER函数:将字符串转换为小写。

例如,将一个句子转换为小写:SELECT LOWER(sentence) FROM table_name;3. CONCAT函数:用于将两个或多个字符串连接起来。

例如,将姓和名连接成一个完整的姓名:SELECT CONCAT(first_name, ' ', last_name) FROM employees;4. SUBSTRING函数:用于截取字符串的一部分。

例如,截取一个日期字符串的年份:SELECT SUBSTRING(date, 1, 4) FROM table_name;5. DATE_FORMAT函数:用于将日期格式化为指定的格式。

常用的单行函数

常用的单行函数
序号
函数名称
描述
1
字符串UPPER(列|字符串)
将传入的字符转为大写
2
字符串LOWER(列|字符串)
将传入的字符转为小写
3
字符串INITCAP(列|字符串)
开头首字母大写,其他字母全部变为小写
4
数字LENGTH(列|字符串)
取得指定字符串的长度
5
字符串SUBSTR(列|字符串[开始索引],[长度])
14
字符串TO_CHAR(列|日期|数字,转换格式)
将日期或数字转换成指定结构的字符串,指定结构也可以是时间结构、数字结构
15
日期TO_DATE(列|字符串,转换格式)
按照指定的转换格式编写字符串后将其变为日期型数据
进行字符串截取,如果没有设置长度,表示从开始索引,一直截取到字符串结尾。
6
字符串REPLACE(列|字符串,新内容,旧内容)
将指定字符串以新数据替换旧数据
7
数字ROUND(列|数字[,小数位RUNC(列|数字[,小数位])
实现数据的截取,即不进位
9
数字MOD(列|数字,列|数字)
求模(计算余数)
10
日期ADD_MONTHS (列|日期,月数)
在指定的日期上增加若干个月之后的日期
11
数字MONTHS_BETWEEN(列|日期,列|日期)
返回两个日期之间的所经历的月数
12
日期LAST_DAY(列|日期)
取得指定日期所在月的最后一天
13
日期NEXT_DAY(列|日期,星期X)
返回下一个指定的一周时间数对应的日期

Oracle笔记(五) 单行函数

Oracle笔记(五) 单行函数

虽然各个数据库都是支持SQL语句的,但是每一个数据库也有每一个数据库自己所支持的操作函数,这些就是单行函数,而如果要想进行数据库开发的话,除了要会使用SQL之外,就是要多学习函数。

单行函数主要分为以下五类:字符函数、数字函数、日期函数、转换函数、通用函数;一、字符函数字符函数的功能主要是进行字符串数据的操作,下面给出几个字符函数:∙UPPER(字符串| 列):将输入的字符串变为大写返回;∙LOWER(字符串| 列):将输入的字符串变为小写返回;∙INITCAP(字符串| 列):开头首字母大写;∙LENGTH(字符串| 列):求出字符串的长度;∙REPLACE(字符串| 列):进行替换;∙SUBSTR(字符串| 列,开始点[,结束点]):字符串截取;Oracle之中有一点比较麻烦,即使要验证字符串,也必须编写完整的SQL语句,所以在Oracle数据库之中为了用户查询方便,所以专门提供了一个“dual”的虚拟表。

范例:观察转大写的函数SELECT UPPER('hello') FROM dual;SQL> SELECT UPPER('hello') FROM dual;UPPER-----HELLO大写转换的用处:在一般的使用之中,用户输入数据的时候去关心数据本身存放的是大写还小写吗?SELECT*FROM emp WHERE ename='&str';SQL> SELECT * FROM emp WHERE ename='&str';输入 str 的值: smith原值 1: SELECT * FROM emp WHERE ename='&str'新值 1: SELECT * FROM emp WHERE ename='smith'未选定行SQL> SELECT * FROM emp WHERE ename='&str';输入 str 的值: SMITH原值 1: SELECT * FROM emp WHERE ename='&str'新值 1: SELECT * FROM emp WHERE ename='SMITH'EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------------- ---------- ---------- ----------7369 SMITH CLERK 7902 17-12月-80 800 20此时如果输入的是小写,则肯定无法查询出数据,所以这个时候不能要求用户这么多,所以这个时候只能由程序自己去适应,加入一个函数:SELECT*FROM emp WHERE ename=UPPER('&str');SQL> SELECT * FROM emp WHERE ename=UPPER('&str');输入 str 的值: smith原值 1: SELECT * FROM emp WHERE ename=UPPER('&str')新值 1: SELECT * FROM emp WHERE ename=UPPER('smith')EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------------- ---------- ---------- ----------7369 SMITH CLERK 7902 17-12月-80 800 20当然以上的“&”的操作属于替代变量的内容,此部分内容不做重点。

ORACLE数据库培训基础篇3(IT运维部门内部培训课件)

ORACLE数据库培训基础篇3(IT运维部门内部培训课件)
instr( )判断后面子串在前面字符串第一次出现的位置: select instr('oracle','a') from dual;
lpad( )左补全,rpad( )右补全: select sal,lpad(sal,4,0),rpad(sal,4,0) from emp;
trim( )去掉前后空格,或者把后面字符串的首尾去掉前面的字符: select trim(' hello ') from dual; select trim('*' from '***oracle***') from dual;
单行函数用法
转换函数:
隐式数据类型转换
显式数据类型转换
单行函数用法Байду номын сангаас
隐式转换:
隐式转换由系统自动完成,会消耗一定的资源。
字符型转数值型: insert into emp1(ename) values(‘123’); 数值型转字符型: select * from emp1 where ename=123; 字符型转时间型:
select * from emp1 where hiredate='17-12月-80';
时间型转字符型: update emp1 set ename=hiredate where empno=7369; update emp1 set hiredate=ename where empno=7499;
months_between( )相差月份: select empno,ename,sal,months_between(sysdate,hiredate) months from emp;
add_months( )为日期增加月份,一个月后: select sysdate,add_months(sysdate,1) from dual;

单行函数

单行函数

单行函数:1. 字符串类型的函数2. 数字类型的函数3. 日期类型的函数注意:1. 函数的名称2. 2.函数的作用3. 函数传递参数的数量以及参数的类型4. 函数的返回结果Select语句查询:用户名(username)s1,密码(password)为:是的用户的信息操作符:1. between。

and。

2.in【list】2. like3. %:0个或多个任意字符4. _: 1个任意字符5. escape:转移特殊字符6. is null5.> < >= <= <> !=6.And or notSqlplus工具的使用:字符串函数:LOWER:将所有字母转换为小写;UPPER:将所有字母转换为大写;INITCAP:将字符串首字母转换为大写;CONCAT:连接多个首字母的值;SUBSTR:截取信息;LENGTH:求长度;NVL:将空值转换为指定的字符串;数字类型的转换:ROUND;TRUNC;Sysdate:当前日期;Dummy:亚表;MOD:求余;字符串类型的转换:TO_CHAR;TO_NUMBER:TO_DATE;外连接分类:左外连接,右外连接和全连接左外连接:(+)在等号右边的链接;特征:会将左边表中不满足条件的记录一并查找出来右外连接:“+”在等号的左边的链接;特征:会将右边表中的不满足条件的记录一并查处;Select name,last_name from s_customer c left outer join s_emp e on e.id=c.sales_rep_id;Select name,last_name from s_emp e right outer join s_customer on e.id=c.sales_rep_id;查询:从员工表中查找员工。

学习python第三天单行函数

学习python第三天单行函数

学习python第三天单⾏函数1.去重:distinct关键字需求:查看公司⼀共有多少部门?select department_id from employees; //此代码会查出107条记录,存在部门重复的问题!select distinct department_id from employees;思考:参看如下代码有没有问题?select employee_id,last_name,distinct department_id from employees;解答:会出现问题(报错了),出错原因,因为在执⾏代码的过程中对于employee_id,last_name这两列都有107条数据,⽽department_id去重之后只有12条数据,数量对不上了!所以报错了!总结:使⽤distinct需谨慎...2.单⾏函数:概念:单数据进单结果出(单进单出)分类学习:1).字符函数2).数字函数3).⽇期函数4).转换函数5).通⽤函数字符函数:1).⼤⼩写转换函数:3个①.lower(m):将字符串中所有字符转换为全⼩写②.upper(m):将字符串中所有字符转换为全⼤写③.initcap(m):将字符串中⾸字母转为⼤写,其余字母转换⼩写代码实现:select lower('ORACLE'),upper('oracle'),initcap('oRACLE') from dual;需求:查询名字为Bell这个⼈的信息?select*from employees where lower(last_name) ='bell';select*from employees where upper(last_name) ='BELL';select*from employees where initcap(last_name) ='Bell';2).字符控制函数:8个①.concat(m,n):将字符串m和字符串n拼接得到⼀个更长的新字符串代码实现:select concat('Hello','World') from dual;select concat(last_name,first_name) from employees;②.length(m):得到某个数据的长度代码实现:select length('python'),length(123456) from dual;select length(employee_id),length(first_name),length(hire_date) from employees;③.substr(x,y,z):将x从y位置开始截取z个长度得到⼀个新的字符串返回给程序参数解释:x:原本的字符串数据y:起点位置(下标,索引)z:截取的长度代码实现:select substr('HelloWorld',1,5) from dual;④.instr(m,n):参数解释:判断某个字符在字符串中⾸次出现的位置m:字符串n:⼀个字符代码实现:select instr('HelloWorld','l') from dual;⑤.replace(x,y,z):将x中的字符y,全部替换为字符z参数解释:x:字符串y:字符串中某个字符z:需要被替换成的字符代码实现:select replace('aaabcdaacdaabefaanba','a','6') from dual;⑥.trim(x from y):去除y字符串中⾸尾的字符x参数解释:x:字符y:字符串代码实现:select trim('m'from'mmmmHellmmmomWmmorldmmmmm') from dual;⑦和⑧.lpad和rpad函数(了解)lpad(x,y,z):rpad(x,y,z):代码实现:select lpad(salary,10,'*'),rpad(salary,10,'*') from employees;2.数字函数:3个①.round(m,n):四舍五⼊②.trunc(m,n):截断③.mod(m,n):求余代码实现:select round(439.456,1),round(439.456,0),round(439.456,-1) from dual; select trunc(439.456,1),trunc(439.456,0),trunc(439.456,-1) from dual; select mod(1100,300) from dual;3.⽇期函数:3个1).⽇期2).时间①.months_between(m,n):⽤于计算两个⽇期之间相差的⽉数(精确)②.add_months(m,n):在原本的m⽉份基础上增加或者删除n个⽉③.last_day(m):得到某个⽇期所在⽉份的最后⼀天关键字:sysdate表⽰当前系统时间测试如下代码:select sysdate from dual;以上代码由于数据库内部的格式限制只能显⽰出⽇期部分数据⽽不能显⽰出时间,我们可以使⽤转换函数to_char(x,y)来实现⽇期和时间的显⽰补充:oracle中的特殊字母有以下这些yyyy:年mm:⽉dd:天day:星期hh:⼩时(1-12)hh24:⼩时(0-23)mi:分钟ss:秒重构上述代码实现⽇期时间数据的显⽰:select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;参看如下代码:select sysdate +1,sysdate,sysdate -2from dual;select (sysdate - hire_date) from employees;总结:对于⽇期数据可以和数字做加减运算,得到的结果就是往前或者往后的天数对于⽇期和⽇期数据之间只能做减法运算,得到的结果就是两个⽇期数据之间相差的天数案例:1).查询公司员⼯⼊职⾄今⼀共多少天了?(使⽤截断保留到整数位,别名worked_day) select last_name,hire_date,trunc(sysdate - hire_date) "worked_day" from employees;2).查询公司员⼯⼊职⾄今⼀共多少个⽉了?(粗糙版本:假设每⽉都是30天)select last_name,hire_date,(sysdate - hire_date) /30 "month_work",months_between(sysdate,hire_date) "mon_work" from employees;3).查询公司在每个⽉倒数第⼆天⼊职的员⼯有哪些?select last_name,hire_date from employeeswhere last_day(hire_date) -1= hire_date;select last_day(sysdate) from dual;select add_months(sysdate,2),add_months(sysdate,-3) from dual;4.转换函数:3个1).to_date2).to_char3).to_number补充:转换函数中涉及到的格式字符:9-->表⽰1位99-->表⽰2位举例:select to_number('123456','999999') from dual;//早版本,需要定义格式(位数)select to_number('123456') from dual;//新版本,可以省略格式【注意事项】:在使⽤to_number函数进⾏数据转换时,我们⼀定要计算正确需要被转换的数据的长度,才能精确定义格式中需要的位数,⼀旦位数过少,直接报错!!需求:查询公司员⼯的部门编号,如果没有部门的显⽰"没有部门"select last_name,department_id,nvl(to_char(department_id,'999'),'没有部门') from employees; select last_name,department_id,nvl(to_char(department_id),'没有部门') from employees;5.通⽤函数1).nvl(expr1,expr2):2).nvl2(expr1,expr2,expr3):nvl2函数的执⾏流程:在执⾏过程中会先执⾏expr1,如果expr1的结果不为null,那么执⾏expr2;如果expr1的结果为null,那么执⾏expr3;需求:查询员⼯编号,姓名,薪资,奖⾦率;如果奖⾦率不为空,那么显⽰奖⾦率 + 0.015以后的结果,如果奖⾦率为空,那么显⽰0.01;代码实现:select employee_id,last_name,salary,commission_pct,nvl2(commission_pct,commission_pct + 0.015,0.01) "new_comm"from employees;sql中的判断结构的引⼊讲解:两种:1).case表达式模板格式:case 字段 when expr1 then xwhen expr2 then ywhen expr3 then z...else n end;需求:查询公司员⼯的编号、姓名、薪资,部门号,如果是70号部门的员⼯,就显⽰⼯资的1.1倍,如果是80号部门的员⼯,就显⽰⼯资的1.2倍,如果是90号部门的员⼯,就显⽰⼯资的1.3倍,其余部门已正常⼯资显⽰;代码如下:select employee_id,last_name,salary,department_id, case department_id when70then salary *1.1 when80then salary *1.2else salary *1.3end-- when 90 then salary * 1.3 end-- else salary endfrom employeeswhere department_id in(70,80,90);2).decode函数模板格式:decode(字段,expr1,val1,expr2,val2,...):需求:查询公司员⼯的编号、姓名、薪资,部门号,如果是70号部门的员⼯,就显⽰⼯资的1.1倍,如果是80号部门的员⼯,就显⽰⼯资的1.2倍,如果是90号部门的员⼯,就显⽰⼯资的1.3倍,其余部门已正常⼯资显⽰;代码如下:select employee_id,last_name,salary,department_id, decode(department_id,70,salary *1.1,80,salary *1.2,-- 90,salary * 1.3,salary *1.3)from employeeswhere department_id in(70,80,90);。

使用单行函数

使用单行函数

使⽤单⾏函数使⽤单⾏函数1 函数单⾏函数:输⼊⼀⾏,返回⼀⾏多⾏函数:输⼊多⾏,返回⼀⾏1.1 单⾏函数单⾏函数:字符函数、数字函数、⽇期函数、转换函数1.2 dual表DUAL表是⼀个“伪表”(虚拟表),只包含⼀个列 DUMMY,数据类型为 VARCHAR2(1) DUAL表只包含⼀⾏,其DUMMY列的值为XDUAL表是为了语法上的完整性2 字符函数2.1 ⼤⼩写转换函数lower()⼩写upper()⼤写initcap()⾸字母⼤写select lower(last_name),upper(last_name),initcap(last_name) from emp;2.2 initcap分隔符select initcap('oracle_nineteenC.ocp%training') from dual;空格、下划线、 %、!、$等都是有效的单词分隔符。

(特殊符号标点符号)3 字符操作函数3.1 concat()连接字符串、列、表达式语法:concat(参数1,参数2)select first_name,last_name,concat(first_name,last_name) full_name from emp;3.2 substr()截取字串语法:substr(string,int a,int b)string:需要截取的字符串int a:截取字符串的开始位置,数字aint b:要截取的字符串的长度,数字bselect substr('oracle',2,4) from dual;select substr('oracle',-3,2) from dual;select substr('oracle',-2,2) from dual;select substr('oracle',-2) from dual;select substr('oracle',2) from dual;select substr('oracle',4) from dual;3.3 length()获取字符串长度(字符数)select length('oracle19ctraining') from dual;select last_name,length(last_name) from emp where rownum<=10;3.4 instr()后⾯⼦串在前⾯字符串第⼀次出现的位置语法:instr(字符串,⼦串)select instr('oracle','a') from dual;select instr('oracle','cle') from dual;select instr('oracle','b') from dual;=0表⽰没有instr 经常⽤来做判断,判断⼀个字符串是否在另外⼀个字符串中3.5 lpad()左补全、rpad()右补全语法:lpad(字符,补全的位数,补全符号)3.6 trim()去掉前后字符、ltrim()去掉前字符、rtrim()去掉后字符去掉空格:select trim(' demo '),ltrim(' demo '),rtrim(' demo ') from dual;去掉前后特殊符号:select trim('#'from'###demo##') from dual;定义特殊符号时,只能定义⼀个,即'#'不能'##'3.7 replace()替换语法:replace(string,strA,strB)string:需要被替换的字符串strA:需要被替换掉的⼦串strB:替换后的⼦串select replace('oracle','ora','ORA-') from dual;select hire_date,replace(hire_date,'-') from emp where rownum<=10;4 数字函数round()四舍五⼊trunc()截取mod()取余数4.1 round()四舍五⼊语法:round(数值,⼩数点位数)select round(74.415,2),round(74.415,0),round(74.415,-1) from dual;4.2 trunc()截断取整select trunc(74.415,2),trunc(74.415),trunc(74.415,-1) from dual;4.3 mod()取余数select mod(1600,300) from dual;select1600/300from dual;select trunc(1600/300,0) from dual;select trunc(1600/300,0),mod(1600,300) from dual;5 ⽇期函数5.1 ⽇期格式5.1.1 数据库默认⽇期格式col PROPERTY_NAME for a30col PROPERTY_VALUE for a50select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME='NLS_DATE_FORMAT';5.1.2 当前session⽇期格式col parameter for a30col value for a50HR@orcl>select*from v$nls_parameters where parameter='NLS_DATE_FORMAT';5.1.3 在数据库中查看当前时间sysdateselect sysdate from dual;5.1.4 修改当前session会话时间格式alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss day'; select sysdate from dual;5.1.5 对⽇期进⾏计算select sysdate+1from dual;select sysdate,sysdate+1/24from dual;select sysdate,sysdate+1/24/60from dual;5.2 months_between()计算⽉数select employee_id,last_name,salary,months_between(sysdate,hire_date) months from emp;5.3 add_months()为⽇期增加⽉份select sysdate from dual;select sysdate,add_months(sysdate,1) from dual;select sysdate,add_months(sysdate,12) from dual;select sysdate,add_months(sysdate,-12) from dual;5.4 next_day()下⼀个⽇期select next_day(sysdate,'MONDAY') from dual;select next_day(sysdate,2) from dual;5.5 last_day()某⽉最后⼀天 (当前时间) select sysdate,last_day(sysdate) from dual;select sysdate from dual;5.6 round()对⽇期四舍五⼊select sysdate,round(sysdate) from dual;select sysdate,round(sysdate,'mi') from dual;select sysdate,round(sysdate,'DD') from dual;5.7 trunc()对⽇期取整select sysdate,trunc(sysdate) from dual;select sysdate,trunc(sysdate,'dd') from dual;select sysdate,trunc(sysdate,'mm') from dual;select sysdate,trunc(sysdate,'yyyy') from dual;6 函数的嵌套select last_name,concat(concat(lower(substr(last_name,1,3)),'''s salary is '),salary) from emp;。

常见单行函数

常见单行函数

常见单行函数在编程中,常见的单行函数是指只有一行代码的函数。

这些函数通常是用来执行简单操作或返回一个简单的表达式的。

下面是一些常见的单行函数示例:1.绝对值函数:```pythondef abs(num):return num if num >= 0 else -num```这个函数使用了条件表达式,如果传入的参数大于等于0,则返回该参数,否则返回其相反数。

2.平方函数:```pythondef square(num):return num**2```这个函数使用了指数运算符(**),它将传入的参数平方后返回。

3.求和函数:```pythondef sum_list(lst):return sum(lst)```这个函数使用了内置函数`sum()`,它会返回传入列表`lst`中所有元素的和。

4.字符串长度函数:```pythondef str_len(string):return len(string)```这个函数使用了内置函数`len()`,它会返回传入字符串`string`的长度。

5.判断奇偶函数:```pythondef is_even(num):return num % 2 == 0```这个函数使用了求余运算符(%),如果传入的参数可以被2整除(即为偶数),则返回True,否则返回False。

6.最大值函数:```pythondef max_num(a, b):return a if a > b else b```这个函数使用了条件表达式,如果`a`大于`b`,则返回`a`,否则返回`b`。

7.简单的加法函数:```pythondef add(a, b):return a + b```这个函数将传入的两个参数相加后返回结果。

8.判断是否是素数函数:```pythondef is_prime(num):return num > 1 and all(num % i != 0 for i in range(2,int(num**0.5) + 1))```这个函数使用了条件表达式和内置函数`all()`,它判断一个数是否为素数。

mysql常见的聚合函数、单行函数

mysql常见的聚合函数、单行函数

mysql常见的聚合函数、单行函数MySQL是一种常用的关系型数据库管理系统,它提供了许多聚合函数和单行函数,以帮助我们对数据进行汇总、计算和处理。

在本文中,我们将介绍一些常见的聚合函数和单行函数,并说明它们的用途和用法。

一、聚合函数1. COUNT:用于计算指定列中的行数。

例如,可以使用COUNT函数统计某个表中的记录数。

2. SUM:用于计算指定列中数值的总和。

例如,可以使用SUM函数计算某个表中某个字段的总和。

3. AVG:用于计算指定列中数值的平均值。

例如,可以使用AVG函数计算某个表中某个字段的平均值。

4. MAX:用于计算指定列中数值的最大值。

例如,可以使用MAX函数找出某个表中某个字段的最大值。

5. MIN:用于计算指定列中数值的最小值。

例如,可以使用MIN函数找出某个表中某个字段的最小值。

二、单行函数1. CONCAT:用于将多个字符串连接在一起。

例如,可以使用CONCAT函数将姓和名连接成一个完整的姓名。

2. LENGTH:用于计算字符串的长度。

例如,可以使用LENGTH函数计算某个字段中字符串的长度。

3. UPPER:用于将字符串转换为大写。

例如,可以使用UPPER函数将某个字段中的字符串转换为大写。

4. LOWER:用于将字符串转换为小写。

例如,可以使用LOWER函数将某个字段中的字符串转换为小写。

5. SUBSTRING:用于提取字符串的一部分。

例如,可以使用SUBSTRING函数提取某个字段中字符串的前几个字符。

总结:在MySQL中,聚合函数和单行函数是非常常用的工具,它们可以帮助我们对数据进行汇总、计算和处理。

通过使用这些函数,我们可以更加高效地分析和处理大量的数据。

无论是统计记录数、计算总和还是提取字符串的一部分,这些函数都能够很好地满足我们的需求。

因此,在使用MySQL进行数据处理和分析时,熟练掌握这些函数的用法是非常重要的。

希望本文对您有所帮助!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单行函数函数分为单行函数和多行函数单行函数:•操作数据对象•接受参数返回一个结果•只对一行进行变换•每行返回一个结果•可以转换数据类型•可以嵌套•参数可以是一列或一个值一.字符函数字符函数是oracle中最常用的函数字符函数分为大小写控制函数和字符控制函数1.大小写控制函数◆lower:将字符串转化为小写的格式lower('SQL Course')→sql course◆uppe:将字符串转化为大写的格式uppe('SQL Course')→ SQL COURSE◆initcap:将字符串的首字母转化为大写initcap('SQL Course') →Sql Course2.字符控制函数◆concat:连接字符CONCAT('Hello', 'World') →HelloWorld◆substr:取字符串的子串◆length:返回字符串的长度LENGTH('HelloWorld') →10◆instr:指定某个字符在字串中的位置INSTR('HelloWorld', 'W') →6◆lpad:当查询工资时,要求显示10位数字,工资不满足10位,在左边用****填充LPAD(salary,10,'*') →*****24000◆rpad:当查询工资时,要求显示10位数字,工资不满足10位,在右边用****填充RPAD(salary, 10, '*') →24000*****◆trim:指定某个字符在字串中去除TRIM('H' FROM 'HelloWorld') →elloWorld◆replace:把字串中的X字符,用Y字符替换掉。

REPLACE(‘abcd’,’b’,’m’)→amcd二.数字函数数字函数的输入参数和返回值的数据类型都是数字类型的.数学函数包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan, tanh,acos,asin,atan,round,我们讲最常用的:◆round(n,[m]):四舍五入该函数用于执行四舍五入,如果省掉m,则四舍五入到整数;如果m是正数,则四舍五入到小数点的m位后.如果m是负数,则四舍五入到小数点的m位前ROUND(45.926, 2) →45.93◆trunc(n,[m]):截断该函数用于截取数字.如果省掉m,就截去小数部分,如果m是正数就截取到小数点的m位后,如果m是负数,则截取到小数点的前m位TRUNC(45.926, 2) →45.92◆floor(n):向下取整,向下舍入(去除小数点部分)floor(1234.99) →1234◆ceil(n):向上取整,向上舍入,(去除小数点部分)floor(1234.01) →1235其他数字函数:abs(n) 返回数字n的绝对值select abs(-13) from dual;acos(n) :返回数字的反余旋值asin(n): 返回数字的反正旋值atan(n): 返回数字的反正切cos(n)exp(n): 返回e的n次幂log(m,n)返回对数值power(m,n):返回m的n次幂三.日期函数默认情况下日期格式是dd-mon-yy即12-7月-78sysdate: 该函数返回系统时间(日期和时间)select sysdate from 表名日期的数学运算在日期上加上或减去一个数字结果仍为日期。

两个日期相减返回日期之间相差的天数(日期不允许做加法运算,无意义)例:查询90号部门员工的工作周数selectlast_name, (sysdate-hire_date)/7 AS WEEKS fromemployeeswheredepartment_id = 90MONTHS_BETWEEN:两个日期相差的月数MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')→ 19.6774194ADD_MONTHS:向指定日期中加上若干月数ADD_MONTHS ('11-JAN-94',6)→'11-JUL-94'NEXT_DAY:指定日期的下一个星期* 对应的日期NEXT_DAY ('01-SEP-95','FRIDAY') →'08-SEP-95'LAST_DAY:本月的最后一天LAST_DAY('01-FEB-95') →'28-FEB-95'ROUND:日期四舍五入假设SYSDATE = '25-JUL-95':ROUND(SYSDATE,'MONTH') →01-AUG-95ROUND(SYSDATE ,'YEAR')→01-JAN-96TRUNC:日期截断假设SYSDATE = '25-JUL-95':TRUNC(SYSDATE ,'MONTH') → 01-JUL-95TRUNC(SYSDATE ,'YEAR') →01-JAN-95四.转换函数数据类型转换分为隐性和显性转换函数用于将数据类型从一种转为另外一种.在某些情况下,oracle server允许值的数据类型和实际的不一样,这时oracle server会隐含的转化数据类型。

隐式数据类型转换(Oracle 自动完成下列转换):显示数据类型转换To_char函数对日期的转换格式:必须包含在单引号中而且大小写敏感。

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

日期之间用逗号隔开。

SELECT TO_CHAR(sysdate,‘yyyy-mm-dd’) FROM dual;例:查询1994年6月7号来公司的员工Select employee_id,hire_dateFrom employeesWhere to_char(hire_data,‘yyyy-mm-dd’)=’1994-06-07’to_char函数对数字的转换下面是在TO_CHAR 函数中经常使用的几种格式:例:select to_char(1234567.89,‘999,999,999.99’)from dual; 9是代表数字返回结果:1,234,567.89返回结果:001,234,567.89例:select to_char(1234567.89,‘$000,000,999.99’)from dual;返回结果:$001,234,567.89TO_data函数对字符的转换例:查询1994年6月7号来公司的员工Select employee_id,hire_dateFrom employeeswhere to_data(‘1994/06/07’,‘yyyy/mm/dd’)=hire_data例:查询1994年6月7号来公司的员工Select employee_id,hire_dateFrom employeesWhere to_char(’1994-06-07’,‘yyyy”年”-mm”月”-dd”日”’)=hire_data (如需穿插字符时,需用””号把字字符括起来)TO_NUMBER 函数对数字的转换使用TO_NUMBER 函数将字符转换成数字:例:select to_number(‘$001,234,567.89’, ‘$000.000.999.99’)+1From dual五.通用函数这些函数适用于任何数据类型,同时也适用于空值:NVL (expr1, expr2)NVL2 (expr1, expr2, expr3)NULLIF (expr1, expr2)COALESCE (expr1, expr2, ...,exprn)将空值转换成一个已知的值:可以使用的数据类型有日期、字符、数字。

NVL(commission_pct,0) 如果nvl为非空值,则返回原来的值,如果nvl为空值,则按0或指定名称来显示。

例:输出last_name,department_id,当department_id为null(空值)时,显示0。

Selecelast_name,nvl(department_id,0) from employees例:输出last_name,department_id,当department_id为null(空值)时,显示’没有部门’。

Selecelast_name,nvl (to_char(department_id, ‘99999’),‘没有部门’) from employees或Selecelast_name,nvl (to_char(department_id),‘没有部门’) from employees???NVL2 (expr1, expr2, expr3)函数NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2(可以是expr1);为NULL,返回expr3。

例:查询员工的资金率,若不为空,返回实际资金率+0.015,若为空,则返回0.01Select last_name,commission_pct,nvl2(commission_pct,commission_pct+0.015,0.01) From employees;使用NULLIF 函数NULLIF (expr1, expr2) : 相等返回NULL,不等返回expr1使用COALESCE 函数COALESCE 与NVL 相比的优点在于COALESCE 可以同时处理交替的多个值。

如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。

六.条件表达式在SQL 语句中使用IF-THEN-ELSE 逻辑使用两种方法:CASE 表达式CASE 表达式CASE expr WHEN comparison_expr1 THEN return_expr1[WHEN comparison_expr2 THEN return_expr2WHEN comparison_exprn THEN return_exprnELSE else_expr]END例:查询部门号为10, 20, 30 的员工信息, 若部门号为10, 则打印其工资的1.1 倍, 20 号部门, 则打印其工资的1.2 倍, 30 号部门打印其工资的1.3 倍数Select employee_id,last_name,department_id,case department_id when 10 then salary*1.1when20 then salary*1.2else salary*1.3 end new_sal(别名)From employeesWhere department_idin(10,20,30)DECODE 函数DECODE(col|expression, search1, result1 ,[, search2, result2,...,][, default])例:查询部门号为10, 20, 30 的员工信息, 若部门号为10, 则打印其工资的1.1 倍, 20 号部门, 则打印其工资的1.2 倍, 30 号部门打印其工资的1.3 倍数Select employee_id,last_name,department_id,decode (department_id ,10 , salary*1.1,20 ,salary*1.2else salary*1.3)new_sal(别名)From employeesWhere department_idin(10,20,30)。

相关文档
最新文档