当前位置:Gxlcms > 数据库问题 > Oracle学习(3):单行函数

Oracle学习(3):单行函数

时间:2021-07-01 10:21:17 帮助过:33人阅读

单行函数:

操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值

技术分享


*************************************************************************************************************************************************

字符函数

技术分享

*************************************************************************************************************************************************

SQL> --字符函数

大小写控制函数


技术分享


SQL> select lower(‘HELLO World‘) 转小写, upper(‘HELLO World‘) 转大写, initcap(‘hello world‘) 首字母大写
  2  from dual;


转小写      转大写      首字母大写                                                                                                                    
----------- ----------- -----------                                                                                                                   
hello world HELLO WORLD Hello World                                                                                                                   


SQL> --substr:求子串
SQL> select substr(‘Hello World‘,4) from dual;


SUBSTR(‘                                                                                                                                              
--------                                                                                                                                              
lo World                                                                                                                                              


SQL> select substr(‘Hello World‘,4,5) from dual;


SUBST                                                                                                                                                 
-----                                                                                                                                                 

lo Wo             


                                                                                                                                    

字符控制函数

技术分享


字符数字节数

SQL> --length:字符数 lengthb:字节数
SQL> select length(‘Hello World‘) 字符数,lengthb(‘Hello World‘) 字节数
  2  from dual;


    字符数     字节数                                                                                                                                 
---------- ----------                                                                                                                                 
        11         11                                                                                                                                 


SQL> ed
已写入 file afiedt.buf


  1  select length(‘北京‘) 字符数,lengthb(‘北京‘) 字节数
  2* from dual
SQL> /


    字符数     字节数                                                                                                                                 
---------- ----------                                                                                                                                 
         2          4                                                                                                                                 


SQL> host cls


查找子串

SQL> --instr:在母串中查找子串,如果找到返回下标(从1开始);否则返回0
SQL> select instr(‘Hello World‘,‘ll‘) from dual;


INSTR(‘HELLOWORLD‘,‘LL‘)                                                                                                                              
------------------------                                                                                                                              

                       3                                                                                                                              


左右填充


SQL> --lpad:左填充 rpad 右填充
SQL> select lpad(‘abcd‘,10,‘*‘) 左填充,rpad(‘abcd‘,10,‘*‘) 右填充 from dual;


左填充     右填充                                                                                                                                     
---------- ----------                                                                                                                                 
******abcd abcd******                                                                                                                                 


SQL> host cls


去掉前后指定的字符

SQL> --trim:去掉前后指定的字符

SQL> select trim(‘H‘ from  ‘Hello WorldH‘) from dual;


TRIM(‘H‘FR                                                                                                                                            
----------                                                                                                                                            
ello World                                                                                                                                            


replace:替换

SQL> --replace:替换
SQL> select replace(‘Hello World‘,‘l‘,‘*‘) from dual;


REPLACE(‘HE                                                                                                                                           
-----------                                                                                                                                           
He**o Wor*d                                                                                                                                           


SQL> host cls


数字函数

SQL> --数值函数

技术分享


四舍五入round

SQL> select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0)  三, round(45.926,-1) 四,round(45.926,-2) 五
  2  from dual;


        一         二         三         四         五                                                                                                
---------- ---------- ---------- ---------- ----------                                                                                                
     45.93       45.9         46         50          0                                                                                                


SQL> ed
已写入 file afiedt.buf

截断函数,TRUNC


  1  select TRUNC(45.926,2) 一,TRUNC(45.926,1) 二,TRUNC(45.926,0)  三, TRUNC(45.926,-1) 四,TRUNC(45.926,-2) 五
  2* from dual
SQL> /


        一         二         三         四         五                                                                                                
---------- ---------- ---------- ---------- ----------                                                                                                
     45.92       45.9         45         40          0                                                                                                


SQL> host cls


日期函数

SQL> --日期函数

           

            Oracle 中的日期型数据实际含有两个值: 日期和时间。

            默认的日期格式是 DD-MON-RR


SQL> select sysdate from dual;

SYSDATE                                                                                                                                               
--------------                                                                                                                                        
25-3月 -12                                                                                                                                            


SQL> select sysdate-1 昨天,sysdate 今天,sysdate+1 明天 from dual;


昨天           今天           明天                                                                                                                    
-------------- -------------- --------------                                                                                                          
24-3月 -12     25-3月 -12     26-3月 -12                                                                                                              


SQL> host cls

粗略计算办法日期查询

(          在日期上加上或减去一个数字结果仍为日期。          两个日期相减返回日期之间相差的天数。          可以用数字除24来向日期中加上或减去小时。 )


SQL> --查询员工的工龄:天 星期 月 年

SQL> select ename,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,(sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
  2  from emp;


ENAME            天       星期         月         年                                                                                                  
-------- ---------- ---------- ---------- ----------                                                                                                  
SMITH    11421.6015 1631.65736  380.72005 31.2920589                                                                                                  
ALLEN    11356.6015 1622.37164 378.553383 31.1139767                                                                                                  
WARD     11354.6015 1622.08593 378.486717 31.1084973                                                                                                  
JONES    11315.6015  1616.5145 377.186717  31.001648                                                                                                  
MARTIN   11136.6015 1590.94307  371.22005  30.511237                                                                                                  
BLAKE    11286.6015 1612.37164  376.22005 30.9221959                                                                                                  
CLARK    11247.6015 1606.80021  374.92005 30.8153466                                                                                                  
SCOTT     9022.6015 1288.94307 300.753383 24.7194562                                                                                                  
KING     11086.6015 1583.80021 369.553383 30.3742507                                                                                                  
TURNER   11156.6015 1593.80021 371.886717 30.5660315                                                                                                  
ADAMS     9022.6015 1288.94307 300.753383 24.7194562                                                                                                  
JAMES    11070.6015  1581.5145  369.02005 30.3304151                                                                                                  
FORD     11070.6015  1581.5145  369.02005 30.3304151                                                                                                  
MILLER   11019.6015 1574.22879  367.32005 30.1906891                                                                                                  


已选择14行。


SQL> select sysdate+hiredate from emp;
select sysdate+hiredate from emp
              *
第 1 行出现错误: 
ORA-00975: 不允许日期 + 日期 



利用oracle函数来精确查询日期

技术分享

SQL> host cls


SQL> --使用months_between计算工龄
SQL> select ename,(sysdate-hiredate)/30 方式一,months_between(sysdate,hiredate) 方式二
  2  from emp;


ENAME        方式一     方式二                                                                                                                        
-------- ---------- ----------                                                                                                                        
SMITH    380.720133 375.277548                                                                                                                        
ALLEN    378.553466 373.180774                                                                                                                        
WARD       378.4868 373.116258                                                                                                                        
JONES      377.1868 371.761419                                                                                                                        
MARTIN   371.220133 365.922709                                                                                                                        
BLAKE    376.220133 370.793677                                                                                                                        
CLARK    374.920133 369.535613                                                                                                                        
SCOTT    300.753466  296.40658                                                                                                                        
KING     369.553466 364.277548                                                                                                                        
TURNER     371.8868 366.567871                                                                                                                        
ADAMS    300.753466  296.40658                                                                                                                        
JAMES    369.020133 363.729161                                                                                                                        
FORD     369.020133 363.729161                                                                                                                        
MILLER   367.320133    362.084                                                                                                                        


已选择14行。


SQL> --add_months:加上若干个月
SQL> select add_months(sysdate,123) from dual;


ADD_MONTHS(SYS                                                                                                                                        
--------------                                                                                                                                        
25-6月 -22                                                                                                                                            


SQL> select last_day(sysdate) from dual;    某月最后一天


LAST_DAY(SYSDA                                                                                                                                        
--------------                                                                                                                                        
31-3月 -12                                                                                                                                            


SQL> select next_day(sysdate,‘星期日‘) from dual;     下一个星期日


NEXT_DAY(SYSDA                                                                                                                                        
--------------                                                                                                                                        
01-4月 -12                                                                                                                                            


SQL> select next_day(sysdate,‘礼拜天‘) from dual;
select next_day(sysdate,‘礼拜天‘) from dual
                        *
第 1 行出现错误: 
ORA-01846: 周中的日无效 




SQL> host cls



SQL> --对日期进行四舍五入
SQL> select round(sysdate,‘MONTH‘), round(sysdate,‘YEAR‘) from dual;


ROUND(SYSDATE, ROUND(SYSDATE,                                                                                                                         
-------------- --------------                                                                                                                         
01-4月 -12     01-1月 -12                                                                                                                             



转换函数

技术分享


隐式转换

SQL> --隐式数据类型转换前提:被转换对象是可以转换的

技术分享




显式转换:


技术分享



to_char对日期的转换

技术分享

***************************************************************************************************************************** 技术分享



*****************************************************************************************************************************



技术分享


SQL> --2012-3月-25今天是星期日
SQL> --2012-3月-25 14:44:00 今天是星期日
SQL> select to_char(sysdate,‘yyyy-mon-dd hh24:mi:mm"今天是" day‘) from dual;


TO_CHAR(SYSDATE,‘YYYY-MON-DDHH24:MI:MM"今                                                                                                             
-----------------------------------------                                                                                                             
2012-3月 -25 14:46:03今天是 星期日                                                                                                                    


SQL> host cls


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 13-7月 -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 13-7月 -87      1100                    20                                                                   
      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行。



to_char对数字的转换

技术分享



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                                                                                                                                   
           ¥950.00                                                                                                                                   
         ¥3,000.00                                                                                                                                   
         ¥1,300.00                                                                                                                                   


已选择14行。


SQL> select * from v$nls_parameters;


PARAMETER                                                        VALUE                                                                                
---------------------------------------------------------------- ----------------------------------------------------------------                     
NLS_LANGUAGE                                                     SIMPLIFIED CHINESE                                                                   
NLS_TERRITORY                                                    CHINA                                                                                
NLS_CURRENCY                                                     ¥                        

人气教程排行