一、字符函数upper和lower

(1)、upper和lower

upper把小写的字符转换成大小的字符 ,lower把大写字符变成小写字符 .

select upper('yes') from dual;--YES
select lower('YES') from dual;--yes

项目中使用:

<if test="null!=batch and batch !=''">
and upper(t2.batch) LIKE '%' || upper(#{batch}) || '%'
</if>

二、数值函数round、trunc和mod

(1)、round:

四舍五入函数,默认情况下 ROUND 四舍五入取整,可以自己指定保留的位数。函数后面的参数表示保留的位数,1表示保留一位小数,二表示保留两位小数,-1表示小数点前面进行1位的四舍五入,56就会变成60,-2表示小数点前面进行2为的四舍五入,56就会变成100.

select round(56.166, 1) from dual;--56.2
select round(56.166, 2) from dual;--56.17
select round(56.166, -1) from dual;--60
select round(56.166, -2) from dual;--100

项目中使用:

SELECT A.supplierName,ROUND(A.receiveWt/1000,2) as receiveWt,ROUND(IFNULL(B.qualifiedWt,0)/1000,2) AS qualifiedWt FROM 。。。

(2)、trunc:截断,是truncation的缩写

直接截取,不在看后面位数的数字是否大于5

select trunc(56.166, 1) from dual;--56.1
select trunc(56.166, 2) from dual;--56.16
select trunc(56.166, -1) from dual;--50
select trunc(56.166, -2) from dual;--0

(3)、mod:求余,是modulo的缩写

select mod(10, 6) from dual;

三、日期函数

Oracle 中提供了很多和日期相关的函数,包括日期的加减,在日期加减时有一些规律:

日期 – 数字 = 日期
日期 + 数字 = 日期
日期 – 日期 = 数字

(1)、SYSDATE函数

SYSDATE函数可以得到目前系统的时间,如:select sysdate from dual;

----查询出emp表中所有员工入职距离现在几天。
select sysdate-e.hiredate from emp e;
----算出明天此刻
select sysdate+1 from dual;
----查询出emp表中所有员工入职距离现在几周。
select round((sysdate-e.hiredate)/7) from emp e;

(2)、MONTHS_BETWEEN() :获得两个时间段中的月数;

----查询出emp表中所有员工入职距离现在几月。
select months_between(sysdate,e.hiredate) from emp e;
----查询出emp表中所有员工入职距离现在几年。
select months_between(sysdate,e.hiredate)/12 from emp e;

(3)、add_months():加多少个月

select sysdate,add_months(sysdate,12) from dual; --加1年

项目中使用:

insert into SYS_DATA_SET values(seqId, 'audit_type', '审核状态类型', '0', null, null, sysdate, null, sysdate);
<insert id="saveMobileMenu">
insert into sys_role_menu_mobile (role_id, menu_id, del_flag, create_by, create_time) VALUES
<foreach collection="list" item="item" separator=",">
(#{roleId}, #{item},0,#{userId}, sysdate())
</foreach>
</insert>
<update id="softDeleteByKey" parameterType="com.jawasoft.pts.entity.IntelDrugStore">
update t_intel_drugstore
set del_flag = '2',
update_by = #{updateBy},
update_time = sysdate
where id = #{id}
</update>

四、转换函数

(1)、TO_DATE:将字符串的数据转换成日期类型

to_date()用法如下:

TO_DATE('2020-11-05 23:59:59', 'yyyy-mm-dd hh24:mi:ss')

前者为字符串,后者为转换日期格式。前后两者要以一对应。

项目中使用:

<if test="null!=startDate and startDate !=''">
and t1.upload_time &gt;= to_date('${startDate}','yyyy-mm-dd')
</if>
<if test="null!=endDate and endDate !=''">
and t1.upload_time &lt;= to_date('${endDate}','yyyy-mm-dd')
</if>

(2)、TO_CHAR:将日期按一定格式转换成字符类型

to_char()用法如下:

select empno,ename,to_char(hiredate,'yyyy-mm-dd') from emp;

在结果中,如1981-02-20, 10 以下的月前面被被补了前导零,可以使用 fm 去掉前导零 to_char(hiredate,'fmyyyy-mm-dd'),改完之后1981-2-20

五、通用函数

(1)、空值处理nvl:null value

范例:查询所有的雇员的年薪

我们发现很多员工的年薪是空的,原因是很多员工的奖金是 null,null和任何数值计算都是null,这时我们可以使用 nvl来处理。

select ename,nvl(comm,0),sal*12+nvl(comm,0) from emo;

(2)、Decode函数

该函数类似 if....else if...esle ,语法:DECODE(col/expression, [search1,result1],[search2, result2]....[default])

Col/expression:列名或表达式;Search1,search2...:用于比较的条件 ;Result1, result2...:返回值

如果 col/expression 和 Searchi匹配就返回 resulti,否则返回 default 的默认值

范例:查询出所有雇员的职位的中文名 :字段为job,如果job为clerk,则返回业务员,以此类推,如果都未匹配上,则返回无业

(3)、case when

语法如下:

CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END

示例:

select t.empno, t.ename,case when t.job = 'CLERK' then
'业务员'
when t.job = 'MANAGER' then
'经理'
when t.job = 'ANALYST' then
'分析员'
when t.job = 'PRESIDENT' then
'总裁'
when t.job = 'SALESMAN' then
'销售'
else
'无业'
end from emp t

在项目中的应用:

select update_time,create_time, case when (update_time is null or update_time = '') then create_time else update_time end from 表名;
<select id="selectTsList" resultType="java.util.Map">
select tts.ID "id",product_Name "productName", DECODE(tts.line_type, '1', tts.production_batch, tts.import_Batch) "batch",
localtion "localtion", d.name as "productUnit" , tts.uom as "uom",
(case when tts.LINE_TYPE='1' then tts.complete_Qty else tts.import_num end ) as "batchNum",
material_Code "materialCode", '1' "materialType"
from T_TRACEABILITY_SLICE tts
left join sys_department d on tts.workshop_code=d.code
<include refid="tsListWhere"></include>
order by tts.create_time desc
</select>

六、聚合函数(又叫分组函数)

(1)、统计记录数 count()

不建议使用 count(*),可以使用一个具体的列以免影响性能。

(2)、最小值查询 min() ,最大值查询 max() ,查询平均值 avg()

(3)、.求和函数 sum()

七、分组统计

分组统计需要使用 GROUP BY来分组

语法:SELECT * |列名 FROM 表名 {WEHRE 查询条件} {GROUP BY 分组字段} ORDER BY 列 名 1 ASC|DESC,列名 2...ASC|DESC

注意: 1. 如果使用分组函数,SQL 只可以把 GOURP BY 分组条件字段和分组函数查询出来,不能有其 他字段。

注意:2. 如果使用分组函数,不使用 GROUP BY 只可以查询出来分组函数的值

范例:查询出部门人数大于 5 人的部门 分析:需要给 count(ename)加条件,此时在本查询中不能使用 where,可以使用HAVING 

项目中使用group by

<select id="selectOriginalBySv" resultType="java.util.Map">
SELECT
t2.id AS originalId,
t2.original_name AS originalName
FROM
t_supplier_variety sv
INNER JOIN t_supplier_variety_original svo ON svo.supplier_variety_id = sv.id AND svo.`is_historical` = 0
INNER JOIN t_supplier s ON s.`id` = sv.`supplier_id`
INNER JOIN t_variety_original t1 ON sv.`variety_id` = t1.`variety_id`
INNER JOIN t_original t2 ON FIND_IN_SET(t2.id, svo.original)
WHERE 1=1
AND t1.del_flag = 0
AND t2.del_flag = 0
<if test="supplierId!=null">
AND s.`id` = #{supplierId}
</if>
<if test="supId!=null">
AND s.`sup_id` = #{supId}
</if> <if test="prcId!=null">
AND s.`prc_id` = #{prcId}
</if> <if test="varietyId!=null">
AND t1.variety_id = #{varietyId}
</if>
GROUP BY t2.id, t2.original_name
</select>

Oracle数据库的函数的更多相关文章

  1. Oracle数据库DECODE函数的使用.

    decode函数是Oracle数据库独有的. 语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 例子:select decode(sign(变量1-变量2) ...

  2. Oracle数据库to_date函数注意事项

    使用PL/SQL连接到Oracle数据库服务器,执行一条update语句: update pjnl set transtime = to_date('2015-05-14 12:13:20','yyy ...

  3. Mysql和Oracle数据库concat()函数

    一.函数的使用参数不同 Mysql支持多个字符串拼接: CONCAT(str1,str2,-) Oralce只支持两个字符串的拼接,若想拼接多个字符串可以嵌套使用concat CONCAT(str1, ...

  4. Oracle数据库--SQL函数

    Oracle SQL函数  1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii( ...

  5. Oracle数据库常用函数

    Oracle常用函数: 20.COS返回一个给定数字的余弦SQL> select cos(-3.1415927) from dual;COS(-3.1415927)--------------- ...

  6. Oracle数据库有用函数

    有用函数 DECODE 语法例如以下: DECODE(value, if1, then1, if2,then2,if3,then3, . . . else )  Value 代表某个表的不论什么类型的 ...

  7. ORACLE 数据库 MOD 函数用法

    1.求2和1的余数. Select mod(2,1) from dual: 2能被1整除所以余数为0. 2.MOD(x,y)返回X除以Y的余数.如果Y是0,则返回X的值. Select mod(2,0 ...

  8. Oracle数据库over函数的使用

    转自:  https://blog.csdn.net/a1065423444/article/details/75635611 over()函数写法over(partition by expr2 or ...

  9. Oracle数据库常用函数使用--持续更新中

    NVL函数.NVL( string1, replace_with).如果string1为NULL,则NVL函数返回replace_with的值,否则返回原来的值. INSTR函数.用于查找指定字符串是 ...

随机推荐

  1. 浅聊TCP的三次握手和四次挥手

    三次握手: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连 ...

  2. 【有趣的全彩LED | 编程】用STM32 HAL库让WS2812B为你所动

    一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1dv411Y7x3 使用STM32 HAL库编程 PWM+DMA控制输出,CubeMX生成初始工程 实现 ...

  3. Selenium爬虫实践(踩坑记录)之ajax请求抓包、浏览器退出

    上一篇: 使用Selenium截取网页上的图片 前言 最近在搞公司内部系统,累的一批,需要从另一个内部系统导出数据存到数据库做分析,有大量的数据采集工作,又没办法去直接拿到那个系统的接口,太难了,只能 ...

  4. springboot基础配置-->Properties配置

    Spring Boot项目中的application.properties配置文件一共可以出现在如下4个位置: 项目根目录下的config文件夹中. 项目根目录下. classpath下的config ...

  5. Codeforces Round #316 (Div. 2) D. Tree Requests(dsu)

    题目链接 题意:对于m次询问 求解以vi为根节点 深度为hi的的字母能不能组合成回文串. 思路:暴力dsu找一边 简直就是神技! #include<bits/stdc++.h> #defi ...

  6. GPLT L2-007 家庭房产 (并查集)

    题意: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 思路: 输入和输出各构造一个结构体,利用并查集归并输入,枚举编号进行输出. #include &l ...

  7. 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)

    题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和.   判断账本真假是通过之前可算到的答案与当前读入的值是否 ...

  8. Kubernets二进制安装(14)之flannel之SNAT规则优化

    flannel之SNAT规则优化的目的是由于在K8S中的容器内,访问不同宿主机中的容器的资源的时候,日志文件会记录为宿主机的IP地址,而不是记录为容器本身自己的IP地址,建议在不同的宿主机上的容器互访 ...

  9. codeforces 1037E-Trips 【构造】

    题目:戳这里 题意:n个点,每天早上会在这n个点中加一条边,每天晚上最大的子图满足子图中每个点都有k条或以上的边. 解题思路:看了官方题解,先把所有的点都连上,再从最后一天往前减边,用set维护最大的 ...

  10. spring-cloud-eureka-client-consumer

    服务注册中心eureka-server已经搭好,并且SPRING-CLOUD-NETFLIX-EUREKA-CLIENT-APPLICATION提供一个hello服务 编写一个eureka-clien ...