2021.10.27
单行函数
一条记录对应一个输出
字符函数
LOWER:转为小写
UPPER:转为大写
INITCAP:首字母转为大写
常见用法:查询某未知大小写字符串,将其全部转为小写/大写
字符控制函数
CONCAT:连接
SUBSTR:求子字符串,从第1位开始,长度为5
LENGTH:求长度
INSTR:查找某个字符在原字符串中的位置
LPAD/RPAD:将字符串向左/右补齐至十位,添加字符’*’
TRIM:去除首尾部分的指定字符
REPLACE:去除所有指定字符
数字函数
ROUND/TRUNC:取小数点后指定位数
MOD:求余数
注意:ROUND/TRUNC第二个参数可以取负数值,即小数点前位数
日期函数
函数SYSDATE返回日期,时间
上图中由于格式问题,需要使用转换函数才能正确显示
日期的数学运算
1.可以直接加上或减去数字
2.两日期相减可以返回相差的天数,两日期不允许做加法运算
常用的日期函数
MONTHS_BETWEEN(a,b):返回ab两月之间相差的月数
ADD_MONTHS(sysdate,2):现在时间2021.10.27+2得到2021.12.27(可以取负数)
NEXT_DAY(sysdate,‘星期日’):返回最近的一个周日的日期
LAST_DAY(sysdate)-1:返回本月倒数第二天
ROUND/TRUNC(sysdate,‘year’):按照年取舍,可填入year(yyyy),month(mm),dd(日),day(星期数),hh,mi,ss
转换函数
隐式转换:
varchar2 or char与number/date之间互相转换
可以实现’1’ + 1
sysdate + ‘1’
与大多数编程语言不同
显示转换:
to_char转化日期
to_char(sysdate,‘yyyy-mm-dd’)
但在需要输入字符串时需要添加双引号
to_char(sysdate,‘yyyy"年"mm"月"dd"日"’)
to_char转化number为char
to_char(1234.56,‘99,999.99’) = 1,234.56
to_char(1234.56,‘00,999.99’) = 01,234.56
参数为9时,显示number对应位数上存在的值,为0时若存在则显示,不存在则自动补0
常用情况,to_char(number,‘99999990.999999’),用于显示小数,若数大于1则显示小数点前的数字值,若小于1则小数点前自动补0
to_char($1.1,‘9990.99’)=$1.1
to_char(L1.1,‘9990.99’)=¥1.1,输出本地的货币符
冷知识:康师傅说人民币符来源于交换“羊”,淘宝中客服虽然称呼人“亲”,但实际想的却是“¥”
to_number转化char为number
to_number(‘¥001.1’,‘L009.9’) = 1.1
参数需要一一对应
通用函数
对于所有数据类型均可使用,同时也适用于空值
NVL(a,b):将a值转化为b
常用情况,对空值进行计算,上一章中提到数据库中默认空值的计算仍为空,不作为0运算,可以添加NVL(null,0)作为计算
同时,可以对于空值直接显示为指定字符串:NVL(null,‘不存在数据’)
注意:若null中含有不一致的类型,如number型,不能直接转化为字符串类型’不存在数据’,需要添加to_char进行转化
NVL2(a,b,c):a不为null则返回b;为null则返回c
NULLIF(a,b):相等返回null,不等返回a
COALESCE(a,b,c):a空返回b,b空返回c
条件表达式
if-then-else逻辑
case表达式
case a when b then c*2
when d then c*3
else c*4 end new_c
当a为b时执行c2,为d时执行c3,否则执行c*4,并以end作为结束
SQL最后将c的新值作为new_c列进行输出
decode函数
将上式中所有内容放入括号内
decode(a,b,c*2
d,c*3
c) new_c
嵌套函数
function1(function2(function3(a,b)))
从内到外进行运算
总结
赶鸭子上架,完全就是先用再学,时间太紧了简直