广德做网站设计开发,wordpress文章主题,网站维护工作方案,怎样建设一个好的网站目录
查询员工的编号、姓名、雇佣日期#xff0c;以及计算出每一位员工到今天为止被雇佣的年数、月数、天数
计算出年
计算月
计算天数 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
查询员工的编号、姓名、雇佣日期#xff0c…目录
查询员工的编号、姓名、雇佣日期以及计算出每一位员工到今天为止被雇佣的年数、月数、天数
计算出年
计算月
计算天数 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
查询员工的编号、姓名、雇佣日期以及计算出每一位员工到今天为止被雇佣的年数、月数、天数
对于本查询而言由于日期的跨度较长 所以要想准确地计算出结果必须结合日期函数
计算出年
如果要计算年按照月来计算是比较准确的那么一定要使用 months_between() 函数进行月 的计算而后除以 12 就是年
SQL select empno,ename,hiredate,trunc(months_between(sysdate,hiredate)/12) year2 from emp;EMPNO ENAME HIREDATE YEAR
---------- -------------------- -------------- ----------7369 SMITH 17-12月-80 437499 ALLEN 20-2月 -81 427521 WARD 22-2月 -81 427566 JONES 02-4月 -81 427654 MARTIN 28-9月 -81 427698 BLAKE 01-5月 -81 427782 CLARK 09-6月 -81 427839 KING 17-11月-81 427844 TURNER 08-9月 -81 427900 JAMES 03-12月-81 427902 FORD 03-12月-81 42
计算月
年的计算结果包含余数余数实际上就是除 12 的结果也就是月数。利用 mod() 函数可以求出余数
SQL select empno,ename,hiredate,2 trunc(months_between(sysdate,hiredate)/12) year,3 trunc(mod(months_between(sysdate,hiredate),12)) months4 from emp;EMPNO ENAME HIREDATE YEAR MONTHS
---------- -------------------- -------------- ---------- ----------7369 SMITH 17-12月-80 43 17499 ALLEN 20-2月 -81 42 117521 WARD 22-2月 -81 42 117566 JONES 02-4月 -81 42 107654 MARTIN 28-9月 -81 42 47698 BLAKE 01-5月 -81 42 97782 CLARK 09-6月 -81 42 87839 KING 17-11月-81 42 27844 TURNER 08-9月 -81 42 57900 JAMES 03-12月-81 42 27902 FORD 03-12月-81 42 2
计算天数
现在所知道的计算天数的操作只有一个公式 “日期 1 - 日期 2 数字天数 ” 。于是现在的问题 就集中在了日期的内容上 ● 日期 1一定是当前日期使用 sysdate伪列 ● 日期 2实际上已经可以利用 months_between() 函数求出两个日期之间的月数 SQL select empno,ename,hiredate,2 trunc(months_between(sysdate,hiredate)/12) year,3 trunc(mod(months_between(sysdate,hiredate),12)) months,4 trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate))) day5 from emp;EMPNO ENAME HIREDATE YEAR MONTHS DAY
---------- -------------------- -------------- ---------- ---------- ----------7369 SMITH 17-12月-80 43 1 277499 ALLEN 20-2月 -81 42 11 247521 WARD 22-2月 -81 42 11 227566 JONES 02-4月 -81 42 10 117654 MARTIN 28-9月 -81 42 4 167698 BLAKE 01-5月 -81 42 9 127782 CLARK 09-6月 -81 42 8 47839 KING 17-11月-81 42 2 277844 TURNER 08-9月 -81 42 5 57900 JAMES 03-12月-81 42 2 107902 FORD 03-12月-81 42 2 10 假设现在需要截取数据表中每个姓名的后三个字母常用的做法如下。 首先一定要确认截取的开始点每个姓名的长度不一样所以开始点也不同。此时 最好的做法是使用 length() 来计算长度
SQL select ename,substr(ename,length(ename)-2)2 from emp;ENAME SUBSTR(ENAME,LENGTH(ENAME)-2)
-------------------- --------------------------------------------------------------------------------
SMITH ITH
ALLEN LEN
WARD ARD
JONES NES
MARTIN TIN
BLAKE AKE
CLARK ARK
KING ING
TURNER NER
JAMES MES
FORD ORD
但是 substr() 可以设置负数索引表示从后向前数
SQL select ename,substr(ename,-3)2 from emp;ENAME SUBSTR(ENAME,-3)
-------------------- ------------------------
SMITH ITH
ALLEN LEN
WARD ARD
JONES NES
MARTIN TIN
BLAKE AKE
CLARK ARK
KING ING
TURNER NER
JAMES MES
FORD ORD