学习笔记(02):Oracle数据库-单行字符串日期及转换函数

立即学习:https://edu.csdn.net/course/play/3574/62068?utm_source=blogtoedu

/*环境设置*/
set linesize 300;
set pagesize 300;

/*单行函数练习*/
SELECT LOWER('Hello') FROM emp;

SELECT LOWER('Hello') FROM dual;

SELECT LOWER('Hello'), UPPER('Hello') FROM dual;

SELECT * FROM  emp WHERE ename = "&inputname";
/*改善输入操作*/
SELECT * FROM emp WHERE ename = UPPER("&inputname");

/*首字母大写 INITCAP*/
SELECT INITCAP('HelloWorld') FROM dual;

/*范例将每一个雇员的姓名首字母大写*/
SELECT INITCAP(ename) FROM emp;

/*计算字符串长度  LENGTH*/
/*查询每个雇员姓名的长度*/
SELECT ENAME, LENGTH(ename) FROM emp;

/*查询雇员姓名长度为5的全部雇员信息*/
SELECT * FROM emp WHERE LENGTH(ename) = 5;

/*字符串替换 REPLACE*/
/*将所有雇员姓名之中的字母A替换为 “_”*/
SELECT REPLACE(ename, UPPER('a'), '_') FROM emp;

/*消除空格数据*/
SELECT REPLACE('hello world nihao zaijian', ' ','')FROM dual;

/*字符串截取  SUBSTR ,索引下标从1开始*/
SELECT SUBSTR('helloworldnihao', 11) FROM dual;

SELECT SUBSTR('专注磨一剑', 2,5) FROM dual;

/*要求截取每一位雇员姓名的前3位字符*/
SELECT SUBSTR(ename, 1, 3) FROM emp;

SELECT SUBSTR(ename,-3) FROM emp;

/*
   面试题: 请问oracle 中的SUBSTR()函数截取时字符串的索引是从1开始还是从0开始?
   Oracle中的字符串索引都是从1开始的,即使设置为0 也会自动变为从1 开始

*/

/*
   数值函数:常用 ROUND(), TRUNC(), MOD()
   
   ROUND语法: ROUND(列 | 数字 [,保留小数位]),如果不设置保留小数位表示不保留
*/

SELECT  ROUND(7895.658944355), ROUND(78945.55662, 2), ROUND(78945.55662, -2), ROUND(-15.35)
FROM dual;

/* 
    截取小数,所有的小数都不进位
    语法: 数字 TRUNC(列|数字, [,小数位])
*/
SELECT  TRUNC(7895.658944355), TRUNC(78945.55662, 2), TRUNC(78945.55662, -2), TRUNC(-15.35)
FROM dual;

/*求模 (求余数)
  语法 : 数字 MOD(列1 |数字1, 列2|数字2)
*/
SELECT  MOD(10, 3) FROM dual;
/*
   日期函数:Oracle专门提供有一个数据伪劣,SYSDATE

*/

SELECT ename, hiredate, SYSDATE FROM emp;

SELECT SYSDATE FROM dual;

SELECT SYSDATE, SYSTIMESTAMP FROM dual;

/*
  日期时间计算模式:
  1. 日期 + 数字 = 日期(若干天之后的日期)
  2. 日期 - 数字 = 日期(若干之前的日期)
  3. 日期 - 日期 = 数字(两个日期间的天数)
*/

SELECT SYSDATE, SYSDATE  + 10, SYSDATE+9999 FROM dual;

SELECT SYSDATE, SYSDATE - 8 FROM dual;

/*计算每一位雇员到今天为止的雇佣天数*/
SELECT ename, hiredate, SYSDATE - hiredate FROM emp;

/*
   计算两个日期之间所经历的月数总和
   语法: MONTHS_BETWEEN(日期1,日期2)
*/
/*计算每一位雇员到今天位置的雇佣总月数*/
SELECT ename, hiredate, MONTHS_BETWEEN(SYSDATE, hiredate) FROM emp;

/*计算每一位雇员到今天的雇佣年份*/
SELECT ename, hiredate, TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate)/12) FROM emp;

/*增加若干月之后的日期:
  语法 : 日期 ADD_MONTHS(日期, 月数)

*/
/* 范例测试 ADD_MONTHS() 函数*/
SELECT ADD_MONTHS(SYSDATE, 4), ADD_MONTHS(SYSDATE, 24), ADD_MONTHS(SYSDATE, 300) FROM dual;

/*利用函数,直接避免了 闰年闰月的换算*/

/*计算所有还差一年满35年雇佣日期的雇员*/
SELECT * FROM emp WHERE TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) = 34 ;

/*
    计算所在日期所在月的最后一天
    语法: 日期LAST_DAY(日期)
*/
SELECT LAST_DAY(SYSDATE) FROM dual;

/*查询所有在雇佣所在月倒数第二天被雇佣的雇员信息*/
/*首先应该知道每一位雇员雇佣月的最后一天,而后利用 "日期-数字=日期",计算出倒数第二天*/

SELECT ename, hiredate, LAST_DAY(hiredate), LAST_DAY(hiredate)-2 FROM emp;

/*计算下一个指定的星期:
  语法: 日期 next_day(日期, 一周时间数)

*/

/*计算雇佣日期的下一个星期二*/
SELECT hiredate, NEXT_DAY(hiredate, '星期二') FROM emp ;

/*要求查询出雇员的编号、姓名、雇佣日期,以及每一位雇员到今天为止所被雇佣的年数、月数、天数*/

SELECT empno, ename, hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate)/12) as hireyears, 
TRUNC(MOD(MONTHS_BETWEEN(SYSDATE, hiredate),12))as hiremonths, 
TRUNC(SYSDATE - ADD_MONTHS(hiredate, MONTHS_BETWEEN(SYSDATE, hiredate))) as hiredays 
FROM emp;

/*转换函数 :
  字符串与日期、数字的转换
  TO_CHAR(列 | 日期|数字,转换格式)  常用 
  转换格式主要两类: 日期转换为字符串: 年(yyyy)、月(mm)、日(dd)、时(hh、hh24)、分(mi)、秒(ss)
                  数字转换为字符串:任意的一位数字(9)、货币(L,本地货币)
  
  TO_DATE()  常用
  TO_NUMBER()

*/

SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd'),TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM dual;

/*查询每个雇员的编号、姓名、雇佣年份*/
SELECT empno, ename, TO_CHAR(hiredate, 'yyyy')  year
FROM emp;

/*查询所有在2月份雇佣的雇员信息*/
SELECT  * FROM emp WHERE TO_CHAR(hiredate, 'mm')='02';
/*Oracle中实际提供数据类型的自动转换
  如果发现比较的类型不统一,在一定的范围内它是可以转换的
*/
SELECT  * FROM emp WHERE TO_CHAR(hiredate, 'mm')=2;

/*转换数字格式*/
SELECT TO_CHAR(789522566252365, 'L999,999,999,999,999') FROM dual;

/* 实现字符串转换为日期*/
SELECT TO_DATE('1988-10-11', 'yyyy-mm-dd') FROM dual;

/*
   转数字函数 TO_NUMBER(字符串)
*/

SELECT TO_NUMBER('123') + TO_NUMBER('1') FROM dual;

SELECT '1'+'2' FROM dual;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值