oracle常用& to_date()怎么轉換帶am pm的時間格式


Oracle
一.字符函數
--大小寫轉換函數
1.LOWER (strexp)    返回字符串,並將所有的字符小寫.
 select lower('ABCDE') from dual

--輸出empbai8o表的姓名(小寫)
select lower(ename) from emp;

2.UPPER (strexp)     返回字符串,並將所有的字符大寫.
select upper('abcdf') from dual

3.INITCAP(strexp)    將字符串的(每個單詞的)第一個字母變為大寫,后面的小寫; 
select initcap(' source fore') from dual
select initcap(' SOURCE FORE') from dual   -- Source Fore(如果都是大寫會自動將第一個字母變為大寫其他的小

寫)

4.CONCAT(strexp, strexp):  連接兩個字符串 
--利用CONCAT函數輸出員工的姓名
select concat(first_name,last_name) from employees

5.substr(str,start_index,length) :從指定的位置截取指定長度的字符串 
select substr('abcdefg',2,3) from dual

6.LENGTH(strexp):返回字符串的長度 
select length('abcdef') from dual

--輸出員工表中first_name的長度
select length(first_name) from employees

7.INSTR(C1,C2,I,J):在一個字符串中搜索指定的字符,返回發現指定的字符的位置;
c1:搜索的字符
c2:要搜索的字符
I:表示從哪個位置開始查找
J:查找第幾次出現
select instr('aborcdoryuklhorp','or',1,2) from dual  ---7
select instr('aborcdoryuklhorp','or',6,2) from dual  ---14   
    
8.LPAD( string1, padded_length, [ pad_string ] )   在列的左邊粘貼字符
 select lpad('acd',8) from dual
 
 
9.RPAD(粘貼字符)    RPAD? 在列的右邊粘貼字符
select rpad('acd',8,'') from dual
select rpad('acdefghijklm',8,'') from dual


10.trim(str):截取字符串兩端特殊字符
select   '  abd   '   from dual
select   trim('  abd   ')   from dual  

11.replace(str,search_str[,replace_str]):將每次在str中出現的search_str用replace_str替換
select replace('HELOVEYOU','HE','I') from dual


二.數學函數
1.round:傳回一個數值,該數值是按照指定的小數位數進行四舍五入運算的結果。
select round(3000.926) from dual  --3001
--小數部分是兩位
select round(3000.926,2) from dual  --3000.93

2.TRUNC函數返回處理后的數值,其工作機制與ROUND函數極為類似,
--只是該函數不對指定小數前或后的部分做相應舍入選擇處理,而統統截去。
select trunc(3000.926) from dual   --3000
select trunc(3000.926,2) from dual  --3000.92

3.mod(number1,number2)兩個數值相除並返回其余數。運算符執行 number1 除以 number2 操作 
select mod(1600,300) from dual   --100


三.轉化函數 
1.TO_CHAR(date,'fmt') :是字符類型的函數,轉化日期為字符
  格式('fmt')
  1、必須用單引號括起來,並且是大小寫敏感
  2、可包含任何有效的日期格式
  3、fmt值的寬度正好能容納所有的有效數字

 
2.修改當前的語言環境為中文
alter session set nls_language='SIMPLIFIED CHINESE'

--輸入當前的系統日期,格式為 yyyy-mm-dd
select sysdate from dual
select to_char(sysdate,'yyyy-mm-dd') from dual

--輸入當前的系統日期,格式為 yyyy-mon-dd
select to_char(sysdate,'yyyy-mon-dd') from dual

--輸入當前的系統日期,格式為 yyyy-month-dd
select to_char(sysdate,'yyyy-month-dd') from dual

--輸入當前的系統日期,格式為 yyyy-mon-dd-day
select to_char(sysdate,'yyyy-mon-dd day') from dual

--輸入當前的系統日期,格式為 yyyy-mon-dd-dy
select to_char(sysdate,'yyyy-mon-dd-dy') from dual

--輸入當前的系統日期,格式為 yyyy-mon-dd-dy-d
select to_char(sysdate,'yyyy/mon/dd/dy/d') from dual

--ddspth 日期的英文顯示
--輸入當前的系統日期,格式為 yyyy-mon-ddspth
select to_char(sysdate,'yyyy-mon-ddspth') from dual  --2010-4月 -seventeenth




3.修改為英文環境(此語句只對當前的窗口有效,當窗口關閉虛重新設置)
alter session set nls_language=AMERICAN;
--輸入當前的系統日期,格式為 yyyy-mm-dd
select to_char(sysdate,'yyyy-mm-dd') from dual

--輸入當前的系統日期,格式為 yyyy-mon-dd
select to_char(sysdate,'yyyy-mon-dd') from dual  --2010-apr-17

--輸入當前的系統日期,格式為 YYYY-MON-DD
select to_char(sysdate,'yyyy-MON-dd') from dual  --2010-APR-17

--輸入當前的系統日期,格式為 YYYY-MONTH-DD
select to_char(sysdate,'YYYY-MONTH-DD') from dual

--輸入當前的系統日期,格式為 yyyy-mon-dd-day
select to_char(sysdate,'yyyy-mon-dd-day') from dual
select to_char(sysdate,'yyyy-mon-dd-DAY') from dual  --2010-apr-17-SATURDAY

--輸入當前的系統日期,格式為 yyyy-mon-dd-dy
select to_char(sysdate,'yyyy-mon-dd-dy') from dual   --2010-apr-17-sat
select to_char(sysdate,'yyyy-mon-dd-DY') from dual    --2010-apr-17-SAT




4.ddspth 不分中英文環境 日期的英文顯示
--輸入當前的系統日期,格式為 yyyy-mon-ddspth
select to_char(sysdate,'yyyy-mon-ddspth') from dual  --2010-apr-seventeenth

--小時 分 秒
--輸入當前的系統日期,格式為 yyyy-mon-dd HH24:MI:SS
select to_char(sysdate,'yyyy-mon-dd HH24:MI:SS') from dual

----輸入當前的系統日期,格式為 dd-mon-yyyy SS:HH24:MI(格式沒有順序)
--注意:使用to_char函數轉化日期--->字符 格式沒有順序 
select to_char(sysdate,'dd-mon-yyyy SS:HH24:MI') from dual


--輸入當前的系統日期,格式為 yyyy-mon-dd HH24:MI:SS AM(PM)
--增加AM PM  --在這個格式中AM PM沒有區別 ,表達的含義是一致的
  select to_char(sysdate,'yyyy-mon-dd HH24:MI:SS AM') from dual
  select to_char(sysdate,'yyyy-mon-dd HH24:MI:SS PM') from dual
  
  select to_char(sysdate,'yyyy-mon-dd HH24:MI:SS PM') from dual
 
--輸入當前的系統日期,格式為 dd of  month (19 of 1月)
--可以在格式中增加字符串,字符串用""引起來
select to_char(sysdate,'dd  of  month ') from dual




5.to_date(char,fmt)  轉化字符為日期
    第一個參數:符合日期格式的字符
    第二個參數:格式(同to_char函數轉化日期的格式)
alter session set nls_language='SIMPLIFIED CHINESE'
alter session set nls_language=AMERICAN;
--轉化2008-04月-18這個字符為日期
select to_date('2008-4月-18','yyyy-mon-dd') from dual;
select to_date('4月-18-2008','mon-dd-yyyy') from dual;

--使用逆向思維:
   --字符的日期  2008-ari-15
    select to_char(sysdate,'yyyy-mon-dd') from dual
    
    --2008-may-19
    select to_date('2009-may-19','yyyy-mon-dd') from dual

--開發中
   --轉化日期為字符輸出
   select to_char(sysdate,'yyyy-mm-dd') from dual
   --轉化字符為日期
   select to_date('2008-12-12','yyyy-mm-dd') from dual
            


6.TO_CHAR(number,'fmt'):是字符類型的函數,轉化數字為字符
 --問題 3000.45轉化這個數字為字符
  --使用 9  輸出如下格式    3000.4500
    select to_char(3000.45,'99999999999.9999') from dual
    
  --使用0  輸出如下格式    0003000.4500
   select to_char(3000.45,'000000000.000000') from dual

  --增加美元符號  輸出如下格式 $0003000.4500
   select to_char(3000.45,'$0000000.0000') from dual

  --增加本地貨幣符號  輸出如下格式 ¥0003000.4500
  select to_char(3000.45,'L0000000.0000') from dual
  select to_char(3000.45,'L99999999999.9999') from dual
  
  --增加千分位符號
 select to_char(3000.45,'99,999,999,999.9999') from dual
 select to_char(3000.45,'00,000,000,0000.0000') from dual

 --使用to_number('字符',格式) --將字符轉化為數字
     符合數字格式的字符
     轉化的格式,等同to_char轉化數字為字符的格式
  
  問題:'3000.45'--轉化為數字
    select to_number('3000.45','0000.00') from dual
  
  問題:'$3000.45'--轉化為數字
    select to_number('$3000.45','$0000.00') from dual   --3000.45



四.日期函數: 
     --計算2008-4月-1日和2008-8月-10日相差多少個月
     --使用months_between(date1,date2)函數
      select months_between(to_date('2008-4月-01','yyyy-mon-dd'),to_date('2008-8月-10','yyyy-mon-dd')) 
      from dual
      
      select months_between(to_date('2008-8月-10','yyyy-mon-dd'),to_date('2008-4月-01','yyyy-mon-dd')) 
      from dual

      --相差多少個月四舍五入到整數
      select round(months_between(to_date('2008-8月-10','yyyy-mon-dd'),to_date('2008-4月-01','yyyy-mon-

dd'))) 
      from dual
      
    
    --給出日期2008-4月-01  計算六個月后的日期
    --使用Add_months(date1,number) 
     select add_months(to_date('2008-4月-01','yyyy-mon-dd'),6)
     from dual
     
    --給出日期date和星期x之后計算下一個星期的日期 
    --使用NEXT_DAY(date,'day') 
    select next_day(to_date('2010-4月-01','yyyy-mon-dd'),'星期三') 
    from dual
  
    --計算指定日期所在月份的最后一天的日期
    --使用last_day(date)
    select last_day(to_date('2010-3月-01','yyyy-mon-dd'))
    from dual
  

五.其他函數

1.使用nvl函數實現:輸出員工的姓名 月薪  提成  月收入
  select first_name,salary,commission_pct,salary(1+nvl(commission_pct,0))   from employees

2.NVL2(expr0,expr1,expr2)
  如果expr0不為Null,返回expr1, 為Null,返回expr2.  
  expr0可以為任何數據類型
--使用nvl2函數實現:輸出員工的姓名 月薪  提成  月收入
select first_name,salary,commission_pct,nvl2(commission_pct,salary(1+commission_pct),salary) 
from employees

3.NULLIF(expr1,expr2)
   比較兩個表達式,如果相等返回空值,如果不等返回第一個表達式
--使用NULLIF函數實現:比較first_name last_name的長度
  select first_name,last_name,nullif(length(first_name),length(last_name)) 
  from employees


4.COALESCE(expr1,expr2,...,exprn)
    返回表達式列表里的第一個非空表達式的值,表達式列表可以包含很多表達式,當第一個滿足值非空時,返回這個表

達式的值。
     expr1,expr2,...,exprn的數據類型必須一致
--使用COALESCE函數:輸出first_name,last_name,job_id和三個字段中非空表達式的值
select first_name,last_name,job_id,COALESCE(first_name,last_name,job_id) from employees
--
CASE expr 
  WHEN comparison_expr1 THEN return_expr1
  [WHEN comparison_expr2 THEN return_expr2
  WHEN comparison_exprn THEN return_exprn
  ELSE else_expr]
  END


需求:輸出first_name,job_id,salary, 漲后的工資
           如果是'人力經理' 工資漲1%
           如果是'計划部經理' 工資漲2%
           如果是'秘書'     工資漲3%
           如果是'保安部經理'   工資漲4%
           其他的漲 5%
           
select first_name,job_id,salary,case job_id
                                  when '人力經理' then   salary(1+0.01) 
                                  when '計划部經理' then   salary(1+0.02)  
                                  when '秘書' then   salary(1+0.03)  
                                  when '保安部經理' then   salary(1+0.04)
                                  else    salary(1+0.05)
                                  end "漲后的工資"
from employees    
--
5.DECODE函數類似於一系列CASE 或 IF-THEN-ELSE 語句
   DECODE(col/expression, 
                  search1, result1 
                     [, search2, result2,...,]
                     [, default])
需求:輸出first_name,job_id,salary, 漲后的工資
           如果是'人力經理' 工資漲1%
           如果是'計划部經理' 工資漲2%
           如果是'秘書'     工資漲3%
           如果是'保安部經理'   工資漲4%
           其他的漲 5%
           
 select first_name,job_id,salary,decode(job_id,
                                       '人力經理',salary(1+0.01),
                                       '計划部經理',salary(1+0.02),
                                       '秘書',salary(1+0.03),
                                       '保安部經理',salary(1+0.04),
                                        salary(1+0.05)
                                       ) "漲后的工資"
 from employees


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM