SQL> host clsSQL> --字符函数
SQL> select lower('Hello World') 小写,upper('Hello World') 大写,initcap('hello world') 首字母大写2 from dual;小写 大写 首字母大写
----------- ----------- -----------
hello world HELLO WORLD Hello World SQL> --substr(a,b) 从a中,第b位开始取
SQL> select substr('Hello World',3) from dual;SUBSTR('H
---------
llo World SQL> --substr(a,b,c) 从a中,第b位开始取,取c位
SQL> select substr('Hello World',3,4) from dual;SUBS
----
llo SQL> --length 字符数 lengthb 字节数
SQL> select length('Hello World') 字符,lengthb('Hello World') 字节2 from dual;字符 字节
---------- ---------- 11 11 SQL> ed
已写入 file afiedt.buf1 select length('北京') 字符,lengthb('北京') 字节2* from dual
SQL> /字符 字节
---------- ---------- 2 4 SQL> host clsSQL> --instr(a,b) 在a中,查询b
SQL> select instr('Hello World','ll') 位置 from dual;位置
---------- 3 SQL> --lpad 左填充 rpad右填充
SQL> -- abcd ---> 10位
SQL> select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右2 from dual;左 右
---------- ----------
******abcd abcd****** SQL> --trim 去掉前后指定的字符
SQL> select trim('H' from 'Hello WorldH') from dual;TRIM('H'FR
----------
ello World SQL> --replace 替换
SQL> select replace('Hello World','l','*') from dual;REPLACE('HE
-----------
He**o Wor*d SQL> host clsSQL> --四舍五入
SQL> select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,2 round(45.926,-1) 四,round(45.926,-2) 五3 from dual;一 二 三 四 五
---------- ---------- ---------- ---------- ---------- 45.93 45.9 46 50 0 SQL> --截断
SQL> ed
已写入 file afiedt.buf1 select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,2 trunc(45.926,-1) 四,trunc(45.926,-2) 五3* from dual
SQL> /一 二 三 四 五
---------- ---------- ---------- ---------- ---------- 45.92 45.9 45 40 0 SQL> host clsSQL> --日期
SQL> --当前时间
SQL> select sysdate from dual;SYSDATE
--------------
10-3月 -15 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;TO_CHAR(SYSDATE,'YY
-------------------
2015-03-10 14:57:11 SQL> --昨天 今天 明天
SQL> select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;昨天 今天 明天
-------------- -------------- --------------
09-3月 -15 10-3月 -15 11-3月 -15 SQL> --计算员工的工龄:天 星期 月 年
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,2 (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年3 from emp;ENAME HIREDATE 天 星期 月 年
---------- -------------- ---------- ---------- ---------- ----------
SMITH 17-12月-80 12501.6256 1785.94652 416.720855 34.2510292
ALLEN 20-2月 -81 12436.6256 1776.66081 414.554188 34.072947
WARD 22-2月 -81 12434.6256 1776.37509 414.487522 34.0674675
JONES 02-4月 -81 12395.6256 1770.80366 413.187522 33.9606182
MARTIN 28-9月 -81 12216.6256 1745.23224 407.220855 33.4702073
BLAKE 01-5月 -81 12366.6256 1766.66081 412.220855 33.8811662
CLARK 09-6月 -81 12327.6256 1761.08938 410.920855 33.7743168
SCOTT 19-4月 -87 10187.6256 1455.37509 339.587522 27.9113031
KING 17-11月-81 12166.6256 1738.08938 405.554188 33.333221
TURNER 08-9月 -81 12236.6256 1748.08938 407.887522 33.5250018
ADAMS 23-5月 -87 10153.6256 1450.51795 338.454188 27.8181525 ENAME HIREDATE 天 星期 月 年
---------- -------------- ---------- ---------- ---------- ----------
JAMES 03-12月-81 12150.6256 1735.80366 405.020855 33.2893853
FORD 03-12月-81 12150.6256 1735.80366 405.020855 33.2893853
MILLER 23-1月 -82 12099.6256 1728.51795 403.320855 33.1496593 已选择 14 行。SQL> select hiredate+sysdate from emp;
select hiredate+sysdate from emp*
第 1 行出现错误:
ORA-00975: 不允许日期 + 日期 SQL> --months_between
SQL> select ename,hiredate,(sysdate-hiredate)/30 一,months_between(sysdate,hiredate) 二2 from emp;ENAME HIREDATE 一 二
---------- -------------- ---------- ----------
SMITH 17-12月-80 416.720919 410.794437
ALLEN 20-2月 -81 414.554252 408.697663
WARD 22-2月 -81 414.487585 408.633147
JONES 02-4月 -81 413.187585 407.278308
MARTIN 28-9月 -81 407.220919 401.439599
BLAKE 01-5月 -81 412.220919 406.310566
CLARK 09-6月 -81 410.920919 405.052502
SCOTT 19-4月 -87 339.587585 334.729921
KING 17-11月-81 405.554252 399.794437
TURNER 08-9月 -81 407.887585 402.08476
ADAMS 23-5月 -87 338.454252 333.600889 ENAME HIREDATE 一 二
---------- -------------- ---------- ----------
JAMES 03-12月-81 405.020919 399.24605
FORD 03-12月-81 405.020919 399.24605
MILLER 23-1月 -82 403.320919 397.600889 已选择 14 行。SQL> --78个月后-
SQL> --add_months
SQL> select add_months(sysdate,78) from dual;ADD_MONTHS(SYS
--------------
10-9月 -21 SQL> --last_day 月的最后一天
SQL> select last_day(sysdate) from dual;LAST_DAY(SYSDA
--------------
31-3月 -15 SQL> --next_day
SQL> --下一个星期二
SQL> select next_day(sysdate,'星期二') from dual;NEXT_DAY(SYSDA
--------------
17-3月 -15 SQL> select next_day(sysdate,'星期三') from dual;NEXT_DAY(SYSDA
--------------
11-3月 -15 SQL>
SQL> select next_day(sysdate,'礼拜三') from dual;
select next_day(sysdate,'礼拜三') from dual*
第 1 行出现错误:
ORA-01846: 周中的日无效 SQL> /*
SQL> next_day的应用:每个星期一自动备份数据
SQL> 1. 分布式数据库
SQL> 2. 快照
SQL> 参考:27-分布式数据库.avi
SQL> */
SQL> --对日期四舍五入
SQL> select round(sysdate,'month'),round(sysdate,'year') from dual;ROUND(SYSDATE, ROUND(SYSDATE,
-------------- --------------
01-3月 -15 01-1月 -15 SQL> --隐式转换的前提:被转换对象是可以转换的
SQL> host clsSQL> --to_char
SQL> --2015-03-10 15:23:12今天是星期二
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI
----------------------------------
2015-03-10 15:24:38今天是星期二 SQL> --查询员工薪水:两位小数 千位符 货币代码
SQL> select to_char(sal,'L9,999.99') from emp;TO_CHAR(SAL,'L9,999
------------------- ¥800.00 ¥1,600.00 ¥1,250.00 ¥2,975.00 ¥1,250.00 ¥2,850.00 ¥2,450.00 ¥3,000.00 ¥5,000.00 ¥1,500.00 ¥1,100.00 TO_CHAR(SAL,'L9,999
------------------- ¥950.00 ¥3,000.00 ¥1,300.00 已选择 14 行。SQL> host clsSQL> -- 通用函数
SQL> --nvl2(a,b,c) 当a=null时候,返回c,否则返回b
SQL> select sal*12+nvl2(comm,comm,0) from emp;SAL*12+NVL2(COMM,COMM,0)
------------------------ 9600 19500 15500 35700 16400 34200 29400 36000 60000 18000 13200 SAL*12+NVL2(COMM,COMM,0)
------------------------ 11400 36000 15600 已选择 14 行。SQL> --nullif(a,b) 当a=b时候,返回null,否则返回a
SQL> select nullif('abc','abc') 值 from dual;值
--- SQL> select nullif('abc','abcd') 值 from dual;值
---
abc SQL> --coalesce 从左到右找到第一个不为null的值
SQL> select comm,sal,coalesce(comm,sal) "第一个不为null的值"2 from emp;COMM SAL 第一个不为null的值
---------- ---------- ------------------ 800 800 300 1600 300 500 1250 500 2975 2975 1400 1250 1400 2850 2850 2450 2450 3000 3000 5000 5000 0 1500 0 1100 1100 COMM SAL 第一个不为null的值
---------- ---------- ------------------ 950 950 3000 3000 1300 1300 已选择 14 行。SQL> host clsSQL> --涨工资,总裁1000 经理800 其他400
SQL> set linesize 200
SQL> select * from emp;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已选择 14 行。SQL> select ename,job,sal 涨前,2 case job when 'PRESIDENT' then sal+10003 when 'MANAGER' then sal+8004 else sal+4005 end 涨后6 from emp;ENAME JOB 涨前 涨后
---------- --------- ---------- ----------
SMITH CLERK 800 1200
ALLEN SALESMAN 1600 2000
WARD SALESMAN 1250 1650
JONES MANAGER 2975 3775
MARTIN SALESMAN 1250 1650
BLAKE MANAGER 2850 3650
CLARK MANAGER 2450 3250
SCOTT ANALYST 3000 3400
KING PRESIDENT 5000 6000
TURNER SALESMAN 1500 1900
ADAMS CLERK 1100 1500 ENAME JOB 涨前 涨后
---------- --------- ---------- ----------
JAMES CLERK 950 1350
FORD ANALYST 3000 3400
MILLER CLERK 1300 1700 已选择 14 行。SQL> select ename,job,sal 涨前,2 decode(job,'PRESIDENT',sal+1000,3 'MANAGER',sal+800,4 sal+400) 涨后5 from emp;ENAME JOB 涨前 涨后
---------- --------- ---------- ----------
SMITH CLERK 800 1200
ALLEN SALESMAN 1600 2000
WARD SALESMAN 1250 1650
JONES MANAGER 2975 3775
MARTIN SALESMAN 1250 1650
BLAKE MANAGER 2850 3650
CLARK MANAGER 2450 3250
SCOTT ANALYST 3000 3400
KING PRESIDENT 5000 6000
TURNER SALESMAN 1500 1900
ADAMS CLERK 1100 1500 ENAME JOB 涨前 涨后
---------- --------- ---------- ----------
JAMES CLERK 950 1350
FORD ANALYST 3000 3400
MILLER CLERK 1300 1700 已选择 14 行。SQL> spool off
详细解决方案
Oracle数据库(三)单行函数
热度:87 发布时间:2023-09-20 22:42:32.0
相关解决方案
- oracle 分页排序,ssi,该怎么处理
- oracle 最近的时间(而不是前一天的时间) 跪求sql语句 。解决方法
- oracle,该怎么解决
- 在 Hibernate3 查询不到 Oracle 11g 里的记录
- oracle 安装时出现 java tm 异常
- android访问其他数据库(如:oracle、MySql等),希望大家给点建议!解决方案
- oracle 安插 LONG VARCHAR 类型数据
- ORACLE 一条SQL的有关问题
- oracle loadjava如何用
- oracle,该如何处理
- C# + SQL server +oracle QQ交流群142703980解决方法
- 怎么跟踪winform应用程序发送到数据库的sql(oracle、mssql)
- , 每次玩ASP都会遇到一些恶心的有关问题, 这次是:未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运,该怎么解决
- 求解:gridview行值的计算并绑定有关问题(asp.net+oracle)
- Oracle.DataAccess 执行多条sql语句,该如何解决
- VS10连接Oracle的有关问题:"Oracle.DataAccess.Client.OracleConnection"的类型初始值设定项引发错误
- System.Data.OleDb.OleDbException: 未找到 Oracle 客户端和网络组件。
- asp.net oracle 参数化 模糊查询出错,该怎么处理
- Oracle-参数查询有关问题
- oracle,insert 语句插入一条记录后要求,返回主键id値。解决思路
- Oracle 10g下的SQL语句,有点难度.请~[同时向朋友们道歉~]
- 月统计(oracle)解决办法
- 在线紧急等一sql语句(oracle),该怎么处理
- 面试问,为什么jsp+oracle,asp+sql server这样来搭配?该如何处理
- oracle 连接数据库该如何写语句的
- System.Data.OracleClient requires Oracle client software version 8.1.7 or greater
- oracle 防sql注入有关问题!
- 求 Oracle Database Server 'TNS Listener'远路数据投毒漏洞 补丁
- oracle 客户端链接服务端的方式?该如何解决