ORACLE常用函数的使用方法
ORACLE常用函数的使用方法
1. 字符串函数
(1) length(); 获取字符长度
SELECT LENGTH('中国') FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM'
(2) lengthb(); 获取字节长度
SELECT LENGTHB('中国') FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' (一个汉字等于两个字节)
(3) ltrim(); 除去左边出现的字符串
SELECT LTRIM(TABLE_NAME) FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //除去左边的空格
SELECT LTRIM(TABLE_NAME, 'XMB') FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //除去左边匹配到的字符XMB
(4) rtrim(); 除去右边出现的字符串
SELECT RTRIM(TABLE_NAME) FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //除去右边的空格
SELECT RTRIM(TABLE_NAME, 'XMB') FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //除去右边匹配到的字符XMB
(5) trim(); 一般都是用在删除字符串两边的空格
SELECT TRIM(TABLE_NAME) FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //除去字段两边出现的空格
SELECT TRIM(LEADING 'M' FROM TABLE_NAME) FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //删除左边出现的指定的字符M
SELECT TRIM(TRAILING 'M' FROM TABLE_NAME) FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //删除右边出现的指定的字符M
SELECT TRIM(BOTH 'M' FROM TABLE_NAME) FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM' //删除两边出现的指定字符M
(6) lpad(string,n,[pad_string]);在字符串左边填充特定的字符
String是原始字符串, n 要返回的字符串长度, 从字符串末尾向前数
当pad_String为null时, 会填充空格
(7) rpad(string,n,[pad_string]);在字符串右边填充特定的字符
使用与lpad一样
(8) substr(); 字符串截取
SELECT SUBSTR(TABLE_NAME, 1 , 4) FROM PLATFORM_METAINFO_TABLES WHERE XMBM = 'XMBM' //截取从索引1开始的4个字符,结合length()函数可实现从左边截取
SELECT SUBSTR(TABLE_NAME, length(TABLE_NAME)- 3 + 1, 3) FROM PLATFORM_METAINFO_TABLES WHERE TABLE_NAME = 'XMBM'
2. 时间函数
设置时间格式: ALTER SESSION SET NLS_DATE_FORMAT = 'dd-mon-yyyy HH:mi:ss'
(1) sysdate //系统时间
(2) current_date //系统时间
(3) to_char(sysdate, 'yyyy-mm-dd HH24:mi:ss'); //将日期转为字符串
(4) to_date('2017-09-22 00:00:00', 'yyyy-MM-dd HH24:mi:ss'); //将字符串转为日期格式
(5) TO_TIMESTAMP();转为时间戳格式, 使用类似于to_date()
SELECT TO_TIMESTAMP(to_char(SYSDATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd HH24:mi:ssxff') FROM RSGL_RYJBXXB WHERE XMPY = 'wjw_chengqiong'
时间计算:
>> 过去一小时/一分钟/一秒
SELECT TO_CHAR(to_date('2019/06/04 14:43:51', 'yyyy/MM/dd hh24:mi:ss') - 1/24, 'yyyy/MM/dd hh24:mi:ss') FROM RSGL_RYJBXXB WHERE XMPY = 'wjw_chengqiong'
>> 过去一天
SELECT TO_CHAR(SYSDATE - 1, 'yyyy/MM/dd hh24:mi:ss') FROM RSGL_RYJBXXB WHERE XMPY = 'wjw_chengqiong'
>> 过去一个月
SELECT add_months(SYSDATE, -1) FROM RSGL_RYJBXXB WHERE XMPY = 'wjw_chengqiong'
3.聚合函数
聚合函数不能作为WHERE里的查询条件出现, 因为聚合函数是对所有查询结果的运算
(1) SUM求和
SELECT SUM(MATTER_CNSX) FROM SP_MATTERS
(2) AVG求均值
SELECT AVG(MATTER_CNSX) FROM SP_MATTERS
(3) MAX和MIN
SELECT MIN(MATTER_CNSX) FROM SP_MATTERS
(4) NVL null值判断
SELECT NVL(MATTER_CNSX, '111111111') FROM SP_MATTERS
(5) ROUND四舍五入
SELECT ROUND (AVG(MATTER_CNSX)) FROM SP_MATTERS
SELECT round(AVG(MATTER_CNSX) * 100) / 100 FROM SP_MATTERS (保留小数点几位)
(6) count(*) 查询表行数
(7) count(column) 查询列行数 , 会忽略null值
4. 关于sql的优化法则
这些优化方式来源于网友的总结,自己在这里也记录一下
(1) 尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。
原因:Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。
而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。
NOT EXISTS 比 NOT IN 效率稍高。但具体在选择IN或EXIST操作时,
要根据主子表数据量大小来具体考虑。
SELECT * FROM SP_MATTERS WHERE UUID IN (SELECT UUID FROM SP_MATTERS)
SELECT * FROM SP_MATTERS WHERE EXISTS (SELECT UUID FROM SP_MATTERS WHERE UUID = SP_MATTERS.UUID)
(2) 不用"<>"或者"!="操作符, 对于不等于操作符会造成全表扫描, 应该用">" OR "<" 代替
(3) is null 或者 is not null 条件会造成全表扫描, 解决方案可以为该列设置非空索引,就可以利用其它条件判断
(4) 在like后面出现通配符 "%" 或者 "_" 时, 索引会失效, 造成全表扫描
(5) 对于有连接的列"||",最后一个连接列索引无效, 尽量避免连接, 可以分开连接或者使用不作用在列上的函数替代
(6) 如果索引不是基于函数的,那么当在where子句中对索引列使用函数时, 索引不再起作用
(7) 对数据类型不同的列进行比较时,会使索引失效
(8) >= 比 >的执行效率高, 原因: >= 会通过索引快速定位等于项, 然后再向下扫描, 选出大于项, 而> 直接走全表扫描
(9) union和union all的区别
union会对结果进行筛选, 消除重复, 数据量大的情况下可能会引起磁盘排序, 如果不删除重复记录
应该使用union all
(10) oracle从下到上多个查询条件时, 应该将过滤量最大的条件放在where子句的末尾
(11) oracle 从右到左处理from后面的多个表时, 应该将数据量最少的表放在最后
(12) order by 语句中的非索引列会降低性能, 可以将排序列添加索引
(13) 当前sql连接多个表时, 使用表的别名, 并将之作为每列的前缀, 这样可以减少解析时间
ORACLE常用函数的使用方法的更多相关文章
- Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...
- Oracle常用函数
前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...
- oracle常用函数总结(二)
之前也有写过“oracle常用函数总结(一)”,为了尽量找全常见oracle函数,笔者特意查找了相关资料来作为参考,下边给大家罗列出来,部分和之前有重复的,希望能帮到大家! 列举了31个函数和1个分组 ...
- oracle常用函数总结
Oracle常用函数总结 ---oracle常用函数-----一.数值型常用函数----取整数--select floor(10.1) from dual;--将n四舍五入,保留小数点后m位(默认情况 ...
- oracle常用函数整理
oracle常用函数整理 1.绝对值.取余.判断数值正负函数 绝对值:ABS(n) 示例: SELECT ABS(100),ABS(-100),ABS('100') FROM ...
- oracle常用函数积累
--oracle常用函数积累-- --1.字符串长度:LENGTH ,语法: CONCAT(string) --示例 select LENGTH('AA_BB') from dual;--结果:5 - ...
- SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等
SQL组成 DML数据操作语言 DCL数据控制语言 DQL数据查询语言 DDL数据定义语言 查询基础语法 记录筛选 where 子句 记录筛选 where 子句 实例练习 实例练习 Select语句中 ...
- 十、oracle 常用函数
一.字符函数字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:lower(char):将字符串转化为小写的格式.upper(char):将字符串转化为大写的格式.length(char) ...
- oracle 常用函数汇总
一.字符函数字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:lower(char):将字符串转化为小写的格式.upper(char):将字符串转化为大写的格式.length(char) ...
随机推荐
- Mybatis 一对多 配置文件
当一个Entity中包含的属性有对象和对象集合时,用mybatis映射时要在Entity中添加一个字段来唯一标识当前的Entity对象.否则查询的Entity集合中的对象会被覆盖掉. 如下一个POJO ...
- 仿真算法数据结构与算法 C++实现
模拟算法:仿真的全过程,通过改变数学模型参数,进一步观察状态更改这些参数发生变化正当程序. 算法思路:利用随机函数来模拟不可预测发生在自然界.(srand() 和 rand()函数生成一个随机数) 模 ...
- Cocos2d-x 脚本语言Lua介绍
Cocos2d-x 脚本语言Lua介绍 本篇博客记录Lua学习.学习来自eoe论坛,Lua语言开发Cocos2d-x游戏入门视频教程,猛戳下面地址: http://www.eoeandroid.com ...
- 【Gerrit】自动设置reviewer
gerrit 提供了一种代码review解决方案,但每次代码提交之后都要设置每个commit的code reviewer, 实在是痛苦. gerrit 在官方说明文档里面提供了解决方法,地址:http ...
- 【转】微信退款时候报”请求被中止: 未能创建 SSL/TLS 安全通道“或”The request was aborted: Could not create SSL/TLS secure channel“的错误
退款测试在我本机测试一切都是正常的,但是发布到了服务器就报这样的一个错啦 但是无论百度或者google或者bing,你能够搜索到的结果都很类似,综合起来就是加这样一些代码,如下 ServicePoin ...
- C#WeakReference弱引用
原文:C#WeakReference弱引用 弱引用:在引用对象的同时,允许垃圾回收该对象. .NET中提供了WeakReference对象来实现这个功能. 对于那些创建便宜但耗费大量内存的对象,即希望 ...
- 利用shell脚本实现计划任务功能 V1.2
2013.05.10 mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1. ...
- Delphi皮肤之 - 图片按钮
效果如图,支持普通.移上去.按下.弹起.禁用5种状态. unit BmpBtn; interface uses Windows, Messages, SysUtils, Classes, Graphi ...
- js基础知识总结:函数
函数内部的属性: arguments 和this是函数内部的两个特殊对象 arguments: function recursion(num){ if(num<=1){ return 1; }e ...
- ASP.NET MVC控制器Controller
控制器的定义 MVC模式下的控制器(Controller)主要负责响应用户的输入,并且在响应时可能的修改模型(Model). 之前的URL访问,通常是通过指定服务器的路径来实现,如访问URL:http ...