SQL中不同类型的函数
在select语句中使用字符,数字,日期和转换函数
使用条件表达式
单行函数:字符 通用 转换 日期 数值
--字符:
-- 控制大小写 lower upper initcap
SELECT lower( ‘AFANGFANG‘),upper(‘AFANGFANGmiaomiao‘) ,initcap(‘AFANGFANG MIAOMIAO‘) FROM dual;
LOWER(‘AFANGFANG‘) UPPER(‘AFANGFANGMIAOMIAO‘) INITCAP(‘AFANGFANGMIAOMIAO‘) ------------------ -------------------------- ---------------------------- afangfang AFANGFANGMIAOMIAO Afangfang Miaomiao
--应用
select last_name from employees where upper(last_name) = ‘KING‘;
LAST_NAME ------------------------- King King
-- 字符控制函数
函数 | 结果 |
concat(‘Hello‘,‘World‘) | HelloWorld 拼接 |
substr(‘HelloWorld‘,1,6) | HelloW 第一位开始 截6个字符 |
length(‘HelloWorld‘) | 10 |
instr(‘HelloWorld‘,‘W‘) | 6 字符在字符串首次出现的位置 select instr(‘HelloWorld‘,‘l‘) from dual; 3 |
lpad(salary,10,‘*‘) | *****24000 给10个位不足的用*填 填左边 select employee_id,last_name,lpad(salary,10,‘ ‘) from employees; |
rpad(salary,10,‘*‘) | 24000***** |
trim(‘H‘ from ‘HelloWorLdH‘) | elloWorLd 去除首尾的 select trim(‘H‘ from ‘HelloWorLdH‘) from dual; |
replace(‘abcedd‘,‘d‘,‘m‘) | abcemm 全部替换 select replace(‘abcedd‘,‘d‘,‘m‘) from dual; |
-- 数字函数
--round 四舍五入
select round(435.45,1),round(435.45),round(435.45,-1) from dual;
ROUND(435.45,1) ROUND(435.45) ROUND(435.45,-1) --------------- ------------- ---------------- 435.5 435 440
-- trunc 截断
select trunc(435.45,1),round(435.45),round(435.45,-1)from dual;
TRUNC(435.45,1) ROUND(435.45) ROUND(435.45,-1) --------------- ------------- ---------------- 435.4 435 440
-- mod 求余
select mod(1200,100)from dual;
MOD(1200,100) ------------- 0
select mod(1200,500)from dual;
MOD(1200,500) ------------- 200
-- 日期的数学运算:在日期上加上或者减去一个数字结果仍为日期
-- 两个日期相减返回日期之间相差的天数(日期不允许做加法运算, 无意义)
-- 可以用数字除去24来向日期中加上或减去的天数
--查工作的天数
select employee_id, last_name, trunc(sysdate-hire_date) worked_days from employees;
EMPLOYEE_ID LAST_NAME WORKED_DAYS ----------- ------------------------- ----------- 100 King 11966 101 Kochhar 11139 102 De Haan 9929 103 Hunold 11035
--查工作月数
select employee_id, last_name, (sysdate-hire_date)/30 worked_days1, months_between(sysdate,hire_date) worked_days2 from employees;
-- 一般使用后面的(准确)select employee_id, last_name,months_between(sysdate,hire_date) worked_days2 from employees;
EMPLOYEE_ID LAST_NAME WORKED_DAYS1 WORKED_DAYS2 ----------- ------------------------- ------------ ------------ 100 King 398.8906821 393.152273 101 Kochhar 371.3240154 366 102 De Haan 330.9906821 326.2813053 103 Hunold 367.8573488 362.6038859
--来公司的员工,hire_date是每个月倒数第二天来公司的有哪些?
select last_name ,hire_date from employees where hire_date = last_day(hire_date)-1;
LAST_NAME HIRE_DATE ------------------------- --------- Atkinson 30-OCT-97 Tucker 30-JAN-97 Olsen 30-MAR-98 King 30-JAN-96
-- 转换函数:数据类型转换 : 隐性 & 显性
-- 隐式转换:
select ‘12‘+2 from dual;
‘12‘+2 ---------- 14
-- 显示转换:
date转换为char型的:where to_char(hire_date,‘yyy"年"-mm"月"-dd"日"‘) = ‘1994年- 03月-09日‘
char转换为date型的:where to_date(‘1994-03-23‘,‘yyyy-mm-dd‘) =hire_date;
numberhe char之间的转换:
select to_char(12343253443.77,999,999,999,999,999,99) from dual;
TO_CHAR(12343253443.77,‘999,999,999,999,999.99‘) ------------------------------------------------ 12,343,253,443.77
原文:https://www.cnblogs.com/afangfang/p/12540709.html