虚拟表DUAL介绍:

dual是一张虚拟表,只有一行一列,用来构成select的语法规则。

Oracle的查询中,必须使用“select 列… from 表”的完整语法,当查询单行函数的时候,from后面使用DUAL表,dual表在系统中只有一行一列,该表在输出单行函数时为了select…from的语法完整性而使用。

单行函数:

定义:对于每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果。

常用的单行函数有:

  字符串函数:对字符串操作;

  数值函数:对数字进行计算,返回一个数字;

  转换函数:可以将一种数据类型转换成另外一种数据类型;

  日期函数:对日期和时间进行处理。

数值函数:

--ABS(X):求数值X的绝对值
SELECT ABS(124),ABS(-34)
FROM DUAL; --POWER(X,Y):求X的Y次幂
SELECT POWER(2,3),POWER(2,-1)
FROM DUAL; --MOD(X,Y):求X除以Y的余数,即取模运算
SELECT MOD(5,2),MOD(5,0)
FROM DUAL; --ROUND(X[,Y]):
--默认 Y = 0 时,返回数值 X 保留整数的四舍五入的值。
--当 Y 为正整数时,就是四舍五入到小数位第 Y 位的值。
--当 Y 为负整数时,就是四舍五入到小数位左边第 |Y| 位的值。
SELECT ROUND(123.567),ROUND(123.44567,1),ROUND(125.456,-1)
FROM DUAL; --TRUNC(X[,Y]):返回数值 X 在第 Y 位截断的值。直接截取,不四舍五入。
--默认 Y = 0 时,返回数值 X 截断整数的值。
--当 Y 为正整数时,就是截断到小数位第 Y 位的值。
--当 Y 为负整数时,就是截断到小数位左边第 |Y| 位的值。
SELECT TRUNC(123.567),TRUNC(123.44567,1),TRUNC(125.456,-1)
FROM DUAL;

转换函数:

--TO_CHAR(D[,FMT]):把日期或数字转换成指定格式的字符串。FMT 是格式化字符串。
SELECT TO_CHAR(12345),TO_CHAR(SYSDATE,'yyyy-mm-dd')
FROM DUAL; --TO_NUMBER(X[,FMT]):把一个字符串以 FMT 格式转换成数字。
SELECT TO_NUMBER('2653') - 53
FROM DUAL; --TO_DATE(X[,FMT]):把一个字符串以 FMT 格式转换成日期类型。
SELECT TO_DATE('20190831 173309','yyyy-mm-dd hh24:mi:ss')
FROM DUAL;

字符串函数:

--ASCII(X):返回字符 X 的 ASCII 码值。
SELECT ASCII('a'),ASCII('A')
FROM DUAL; --CONCAT(X,Y):连接字符串 X 和 Y(字符串的拼接)
SELECT CONCAT('hello',' world')
FROM DUAL; --INSTR(X,STR[,START][,N]):在字符串 X 中查找 STR,可以指定从 START 开始,第 N 次出现的位置。
SELECT INSTR('abcdabcdabcd','bc',2,2),INSTR('abcdabcdabcd','c',3,3)
FROM DUAL; --LENGTH(X):返回字符串 X 的长度。
SELECT LENGTH('abcdabcdabcd') FROM DUAL;
SELECT ENAME,LENGTH(ENAME) FROM EMP; --LOWER(X):将字符串 X 全部转换成对应的小写。
--UPPER(X):将字符串 X 全部转换成对应的大写。
SELECT LOWER('hEllO'),UPPER('hEllO')
FROM DUAL; --INITCAP(X):将字符串 X 中的首写字母转换成对应的大写,其它字符全部变成小写.
--字符串用逗号或者空格隔开,隔开的字符会被当做一个新的字符,首字母大写
SELECT INITCAP('hEllO'),INITCAP('hEllO,wOrL D')
FROM DUAL; --LTRIM(X[,TRIM_STR]):将字符串 X 左边的连续字符 TRIM_STR 去掉。(默认是去掉空格键)
--RTRIM(X,[TRIM_STR]):将字符串 X 右边的连续字符 TRIM_STR 去掉。(默认是去掉空格键)
--TRIM([TRIM_STR FROM] X):将字符串 X 两边连续的字符 TRIM_STR 去掉。(默认是去掉空格键)
SELECT LTRIM('****abc def ****','*'),RTRIM('****abc def ****','*'),TRIM('*' FROM ' ****abc def ****')
FROM DUAL; --REPLACE(X,OLD_STR,NEW_STR):将字符串 X 的 OLD_STR 字符全换替换成 NEW_STR字符。
SELECT REPLACE('****abc def ****','*','+')
FROM DUAL; --SUBSTR(X,START[,LENGTH]):截取字符串 X,从 START 位置开始,截取 LENGTH 个长度的字符。(默认是截取到末尾)
SELECT SUBSTR('****abc def ****',5),SUBSTR('****abc def ****',2,6),SUBSTR('****abc def ***g',-2)
FROM DUAL;

日期函数:

参考:https://blog.csdn.net/qq_33459369/article/details/80305175

--系统日期
SELECT SYSDATE
FROM DUAL; --ADD_MONTHS(D,N):在日期 D 上增加 N 个月,返回计算后的新日期。
SELECT ADD_MONTHS(SYSDATE,2),
ADD_MONTHS(SYSDATE,-2)
FROM DUAL; --LAST_DAY(D):返回指定日期 D 当月的最后一天。
SELECT LAST_DAY(SYSDATE),
LAST_DAY(TO_DATE('20200810','yyyymmdd'))
FROM DUAL; --MONTHS_BETWEEN(DATE1,DATE2):用于计算DATE1和DATE2之间有几个月
--如果DATE1在日历中比DATE2晚,那么MONTHS_BETWEEN()就返回一个正数。
--如果DATE1在日历中比DATE2早,那么MONTHS_BETWEEN()就返回一个负数。
--如果DATE1和DATE2日期一样,那么MONTHS_BETWEEN()就返回一个0。
SELECT MONTHS_BETWEEN(TO_DATE('20200721', 'yyyy-mm-dd'),
TO_DATE('20180305', 'yyyy-mm-dd')) 相隔月数
FROM DUAL; --ROUND(D[,FMT]):返回一个以 FMT 格式的四舍五入的日期值,D 是日期,FMT 是格式模型。
/*
① 如果 FMT 为“YEAR”,则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下一年。
② 如果 FMT 为“MONTH”,则舍入到某月的 1 日,即前半月舍去,后半月作为下一月。
③ 默认为“DD”,即月中的某一天,舍入最靠近的那天凌晨,前半天舍去,后半天作为第二天。
④ 如果 FMT 为“DAY”,则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日。
*/
SELECT SYSDATE,
ROUND(SYSDATE,'year') YEAR_1,
ROUND(SYSDATE - 120,'year') YEAR_2,
ROUND(SYSDATE,'month') MONTH_1,
ROUND(SYSDATE + 2,'month') MONTH_2,
ROUND(SYSDATE,'dd') DD_1,
ROUND(TO_DATE('20200915 110000','yyyymmdd hh24:mi:ss'),'dd') DD_2,
ROUND(SYSDATE,'day') DAY_1,
ROUND(SYSDATE + 2,'day') DAY_2
FROM DUAL; --TRUNC(D[,FMT]):将日期 D 截取到 FMT 指定的形式,与ROUND类似,但是不对日期进行四舍五入。
/*
① 如果 FMT 为“YEAR”,则截取到某年的 1 月 1 日。
② 如果 FMT 为“MONTH”,则截取到某月的 1 日。
③ 默认为“DD”,即月中的某一天,截取到当天凌晨。
④ 如果 FMT 为“DAY”,则截取到上周的周日。
*/
SELECT SYSDATE,
TRUNC(SYSDATE,'year') YEAR_1,
TRUNC(SYSDATE - 120,'year') YEAR_2,
TRUNC(SYSDATE,'month') MONTH_1,
TRUNC(SYSDATE + 2,'month') MONTH_2,
TRUNC(SYSDATE,'dd') DD_1,
TRUNC(TO_DATE('20200915 110000','yyyymmdd hh24:mi:ss'),'dd') DD_2,
TRUNC(SYSDATE,'day') DAY_1,
TRUNC(SYSDATE + 2,'day') DAY_2
FROM DUAL;

通用函数:

通用函数即是常用的函数

--1.NVL(列,默认值):如果列的值为NULL,则使用默认值表示。
SELECT E.MGR,
NVL(E.MGR,9999),
E.COMM,
NVL(E.COMM,8888)
FROM EMP E; --2.NVL2(列,返回值1,返回值2):如果列的值不为NULL,则使用返回值1;如果列的值为NULL,则使用返回值2.
SELECT E.COMM,
NVL2(E.COMM,10000,20000)
FROM EMP E; --3.CASE WHEN 条件1 THEN 返回值1 [WHEN 条件2 THEN 返回值2...] ELSE 默认值 END:
--用于实现多条件判断,如果都不满足则使用默认值。
SELECT E.DEPTNO,
CASE
WHEN E.DEPTNO = 10 THEN
'10部门员工'
WHEN E.DEPTNO = 20 THEN
'20部门员工'
WHEN E.DEPTNO = 30 THEN
'30部门员工'
ELSE
'其他部门员工'
END 部门注释
FROM EMP E; --将EMP表中的SAL字段进行标注:薪资在800~1500之间标记为'等级A',1501~3000标记为'等级B',
--3001~4500标记为'等级C',其它范围标记为'等级D'。
--方法一
SELECT E.SAL,
CASE
WHEN E.SAL >= 800 AND E.SAL <= 1500 THEN
'等级A'
WHEN E.SAL >= 1501 AND E.SAL <= 3000 THEN
'等级B'
WHEN E.SAL >= 3001 AND E.SAL <= 4500 THEN
'等级C'
ELSE
'等级D'
END 薪资等级
FROM EMP E; --方法二
SELECT E.SAL,
CASE
WHEN E.SAL BETWEEN 800 AND 1500 THEN
'等级A'
WHEN E.SAL BETWEEN 1501 AND 3000 THEN
'等级B'
WHEN E.SAL BETWEEN 3001 AND 4500 THEN
'等级C'
ELSE
'等级D'
END 薪资等级
FROM EMP E; --DECODE(列 | 值,判断值1,返回值1,判断值2,返回值2...,默认值):
--用于多值判断,如果列的值与判断值相同,则使用对应的返回值,如果没有满足条件,则显示默认值。
SELECT E.DEPTNO,
DECODE(E.DEPTNO,10,'10部门员工',20,'20部门员工',30,'30部门员工','其它部门员工')
FROM EMP E; --将EMP表中JOB字段标注:
--'CLERK':'行员','SALESMAN':'销售员','MANAGER':'经理','ANALYST':'分析师',否则都标记为'其它岗位'
--方法一
SELECT E.JOB,
DECODE(E.JOB,'CLERK','行员','SALESMAN','销售员','MANAGER','经理','ANALYST','分析师','其它岗位') 岗位注释
FROM EMP E; --方法二
SELECT E.JOB,
CASE
WHEN E.JOB = 'CLERK' THEN
'行员'
WHEN E.JOB = 'SALESMAN' THEN
'销售员'
WHEN E.JOB = 'MANAGER' THEN
'经理'
WHEN E.JOB = 'ANALYST' THEN
'分析师'
ELSE
'其它岗位'
END
FROM EMP E; --EXISTS(子查询):用于判断子查询是否有数据返回,如果有则成立,否则不成立。
SELECT D.*
FROM DEPT D
WHERE EXISTS(SELECT 1 FROM EMP E WHERE E.DEPTNO = D.DEPTNO); --NOT EXISTS:
SELECT D.*
FROM DEPT D
WHERE NOT EXISTS(SELECT 1 FROM EMP E WHERE E.DEPTNO = D.DEPTNO);

Oracle之单行函数(字符串函数/数字函数/转换函数/日期函数/通用函数)的更多相关文章

  1. js中字符串,数字之间转换的常用方法

    var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...

  2. oracle学习笔记:字符串替换 replace、regexp_replace、translate函数

    1.replace 函数 语法:replace(char, search_string, replacement_string) --针对字符串替换 功能: ​ 将char中的字符串替换. ​ 当re ...

  3. java报表工具FineReport常用函数的用法总结(文本和日期函数)

    文本函数 CHAR CHAR(number):根据指定数字返回对应的字符.CHAR函数可将计算机其他类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字 ...

  4. java:字符串与数字的转换

    各种数字类型转换成字符串型 int i =8; String s =Integer.toString(i);// String g =String.valueOf(i); // 其中 value 为任 ...

  5. Objective-C - - 字符串与数字互相转换

    NSString *string = @"123"; // 1.字符串转int int intString = [string intValue]; // 2.int装字符串 NS ...

  6. 让用户输入一个日期字符串,将其转换成日期格式, 格式是(yyyy/MM/dd,yyyyMMdd,yyyy-MM-dd)中的一种, 任何一种转换成功都可以; 如果所有的都无法转换,输出日期格式非法。

    第三种方法 while(true) {             Date d;        System.out.println("正在进行第一次匹配,请稍后~—~");     ...

  7. 2-2 Sass的函数功能-字符串与数字函数

    Sass的函数简介 在 Sass 中除了可以定义变量,具有 @extend.%placeholder 和 mixins 等特性之外,还自备了一系列的函数功能.其主要包括: 字符串函数 数字函数 列表函 ...

  8. SQL Fundamentals || Single-Row Functions || 日期函数date functions

    SQL Fundamentals || Oracle SQL语言   SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...

  9. SQLserver日期函数

      ------------------日期转化成年月日时分秒毫秒--------------- select 'R'+CONVERT(varchar(100), GETDATE(), 112)+ri ...

随机推荐

  1. SSM项目使用拦截器实现登录验证功能

    SSM项目使用拦截器实现登录验证功能 登录接口实现 public User queryUser(String UserName, String Password,HttpServletRequest ...

  2. golang中的go get命令

    ### 下载指定版本 go get k8s.io/klog@v1.0.0 go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装. 这个命令在内部实际上分成了两 ...

  3. AOP-底层原理(JDK动态代理实现)

    AOP(JDK动态代理) 1,使用JDK动态代理,使用Proxy类里面的方法创建代理对象 (1)调用 newProxyInstance 方法 方法有三个参数 第一参数,类加载器 第二参数,增强方法所在 ...

  4. python11day

    昨日回顾 函数的参数: 实参角度:位置参数.关键字参数.混合参数 形参角度:位置参数.默认参数.仅限关键字参数.万能参数 形参角度参数顺序:位置参数,*args,默认参数,仅限关键字参数,**kwar ...

  5. hashmap 实现 相同的key值时,value值叠加效果。

    一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...

  6. 别人都在认真听课,而我埋头写Python为主播疯狂点点点点点赞!

    最近有次在钉钉看直播,发现这个直播非常之精彩,于是情不自禁地想要为主播大佬连刷一波赞: 但我发现,手动连击点赞速度十分不可观.气人的是,钉钉直播不能长按刷赞!这让我很恼怒.心中满怀的激动和兴奋以及对大 ...

  7. django入门 02 初探app、view、url、templates、static

    创建APP命令 python manage.py startapp myapp app组成介绍 如上图,在终端中展示树状结构-- windows为 tree /f macOS为 tree 注册APP ...

  8. CF Round #530 Div2

    A. 尛你 \(\%\%\%\) B. 题意:你需要在平面上画 \(n(n \le 10 ^ 9)\) 个 \(1 \times 1\) 的正方形,且顶点都在整点上,每次可以画一条长度为 \(1\) ...

  9. AT2346 [ARC070B] No Need

    这里介绍几种做法. 解法一 首先可以转化一下题意,\(\forall i\) 如果 \(i\) 不是可有可无的当且仅当不用 \(i\) 能拼出 \([K - a_i, K)\) 中的数. 基于观察可以 ...

  10. Linux安装MySQL详细步骤(CentOS6、CentOS7)

    1.查看mysql的依赖(centos7 要把mysql改成mariadb) rpm -qa | grep mysql 2.删除mysql的依赖,可以两个都执行(centos7 要把mysql改成ma ...