1.根据出生日期算年龄
FLOOR(MONTHS_BETWEEN(SYSDATE,b.birthday)/12)
2.根据身份证号算年龄
TRUNC(months_between(sysdate, to_date(substr(id_number, 7, 8), 'yyyy-mm-dd')) / 12) as 年龄
3.取四舍五入的几位小数
select round(1.2345, 3) from dual; 结果:1.235
保留两位小数,只舍
select trunc(1.2345, 2) from dual; 结果 :1.23
4.--查询主键重复数据
1.select * from db_base_info where zy_id in (select zy_id from db_base_info group by zy_id having count(zy_id) > 1)
2.删除主键重复的数据
delete from db_base_info WHERE (zy_id) IN (SELECT zy_id FROM db_base_info GROUP BY zy_id HAVING COUNT(zy_id) > 1) AND ROWID NOT IN (SELECT Max(ROWID) FROM db_base_info GROUP BY zy_id HAVING COUNT(*) > 1);
5.常用函数
replace(#,',','') --去除字段中的,
to_char(wm_concat(text)) --合并列
to_date(substr('#',0,19), 'YYYY-MM-DD HH24:MI:SS') --处理时间格式数据
to_char(sysdate, 'yyyymmddhh24miss') --获取当前时间的字符串
to_char(sysdate, 'yyyymmddhh24miss')||trunc(dbms_random.value(0,1000)) --获取字符串number
decode(t.sex,1,'男',2,'女') --判断等于
floor(MONTHS_BETWEEN(sysdate,t2.birthdate)/12) as age --通过出生日期算出年龄
sys_guid() -- 获取UUID
nvl(‘1’,0) --判断 如果1为空 就给0
6.Orcale中 indexOf()
select instr('保定市南市区','市',1,1) from dual;的值就是5
第一个: 为原字段
第二个: 检索值
第三个: 1为从左边开始,如果为-1,则从右边开始。
第四个: 为“市”出现的第几次
7.Orcale中 substr()
substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串
substr('Hello World',1,1) //返回结果为 'H' *0和1都是表示截取的开始位置为第一个字符
substr('Hello World',2,4) //返回结果为 'ello'
substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符
8.oracle中查看字符集
select userenv('language') from dual;
9.处理时间日期转换错误的数据
to_char(cast(cast(时间字段 as timestamp) as date),