1. 程式人生 > >oracle-常用函式

oracle-常用函式

--substr(擷取字串,含頭不含尾) concat(拼接字串) length(獲取字串長度)        select id,substr(id , 0, 1), concat(id, name) name, id || name, length(name), salary, length(salary) from girls;--instr(檢視某一個字元或者字串在目標字串的位置)        可以寫兩個,三個,四個引數,第一個是目標字串,第二個查詢的字串或者字元,第三個是從那個位置開始找,如果是正數,則從左往右找,找到後,最後在看這個查詢的字串第一個字元在目標字串的位置;如果是負數,首先我們得定位這個負數代表得是哪個位置,最後一個字元是-1,第一個字元是-length,然後我們在從右往左來檢視,特殊情況是這個數字的絕對值已經大於目標字串的長度了,此時,結果永遠是0,如果是+length,如果查詢的不是最後一個字元,其他的任何字元都是0,如果是-length,如果不是找的第一個字元,其他任何字元都是0,第四個引數是找第幾個符合查詢的字串或者字元。最後有一點,我們是確認某一個字元的位置後,看這個字元在完整的目標字串的位置,比如helloworld,l的位置永遠只能是0,3,4,9,其他情況不可能出現。        select                 instr('helloworld', 'l'),                instr('helloworld', 'l'),                instr('helloworld', 'l', 4),                instr('helloworld', 'd', 10),                instr('helloworld', 'l', 10),                instr('helloworld', 'l', -2),                instr('helloworld', 'l', -7, 2),               instr('helloworld', 'h', -10, 1),               instr('helloworld', 'l', -11, 1)         from dual;--upper(變大寫),lower(變小寫)

       select upper('heLLOworld'), lower('heLLOworld') from dual; --initcap(將空格或者特殊符號分割的後的多個字串,每一個字串的第一個字元大寫其他字元小寫)        select initcap('helLo woRld'), initcap('helLo/woRld'), initcap('helLo,woRld') from dual;--replace (將目標字串的某一個字串或者字元被另一個字串或者字元替換)        select replace('hello world', 'l', '@'), replace('hello world', 'll', '@') from dual;--trim,ltrim,rtrim,預設刪除左右空格,左空格,右空格
       select trim('  hello world  '),length(trim('  hello world  ')), rtrim('  hello world  ') from dual; --trim,目標不是刪除空格的話,那麼只能針對一個字元進行刪除,leading刪除左側,trailing刪除右側,both兩側        select trim(leading 'h' from 'helloh') from dual;         select trim(trailing 'h' from 'helloh') from dual;        select trim(both 'h' from 'helloh') from dual;        select trim(leading 'he' from 'helloh') from dual; --ltrim,rtrim,刪除目標字串匹配第二個字串字串,一個從左,一個從右
       select ltrim('hellohe', 'he') from dual;        select rtrim('hellohe', 'he') from dual;--to_char(將日期或者數字型別資料轉成字串)         select to_char(sysdate, 'YYYY/MM-DD') from dual;        select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;        select to_char(sysdate) from dual;        select to_char(88877) from dual;        select to_char(123,'09999') from dual;        select to_char(12345678,'999,999,999,999') from dual;        select to_char(12345,'999.999') from dual;--to_date(將前者格式是日期型別的字串轉成後者格式的date型別資料,第一,二個引數的分隔符隨便寫,只要是一個符號分割的,反正結果都是年/月/日 時:分:秒)        select to_date('2018/01.01','YYYY;MM;DD') from dual;        select to_date('2018.01.01 11/11:11','YYYY-MM-DD HH24:mi:ss') from dual;        select to_date('2018.01.01','YYYY/MM/DD') from dual;--to_number(將能轉成數字的字串轉成數字)        select to_number('2019.1') from dual;--nvl 如果第一個引數是空的字串或者null值,則替換成第二個目標字串,否則則不替換        select nvl(null,'空值'),nvl('','空值'),nvl('null','空值')  from dual;--nvl2  如果第一個引數是空的字串或者null值,則替換成第三個引數,否則替換成第二個引數        select nvl2(null,'不是空值','空值'),nvl2('','不是空值','空值'),nvl2('null','不是空值','空值')  from dual;--max,min,count,avg,sum常用就不寫了 --decode 用法decode(?,'值1','顯示1','值2','顯示2','其他')        select name, type, decode(type, '1', '明星', '0','古文', '未知') from girls;--trunc --對數字進行舍入工作,不會做入,通通舍,預設是捨棄所有小數,可以寫第二個引數,表示從那一位開始捨棄,小數點是0,個位是1,第一個小數是-1,如果捨棄多了,則是0        select trunc(123.98), trunc(123.189,2), trunc(123.123,-1), trunc(123.123,-3) from dual; --對日期進行舍入工作(當年第一天,當月第一天,...),第二個引數是YYYY MM DD HH24 mi ss 這樣的特殊字串,代表從頭到那個部分都保留,之後的部分做舍操作,有點特殊的是,如果時分秒都是舍操作,則只會顯示年月日,        select sysdate, trunc(sysdate), trunc(sysdate, 'YYYY'), trunc(sysdate, 'MM'), trunc(sysdate, 'DD'), trunc(sysdate, 'HH24') from dual; --下面這個第二個引數D,有點特殊顯示的是當前日期所在當前星期的第一天,而且第一天是從星期天開始的,我試了下M/D/S這些是會報錯了,暫時把這個D當作特殊處理的吧        select trunc(sysdate, 'D') from dual;--round (四捨五入), 這個比較平常,沒啥好記錄的        select round(123.98), round(123.189,2), round(123.123,-1), round(123.123,-3) from dual;--ceil (大於目標數字的最小整數),floor (小於目標數字的最大整數)        select ceil(2.3), floor(2.3) from dual;--abs (絕對值)        select abs(-5), abs(-5.2) from dual;--mod (求餘數,支援整數小數,如果第一個引數還沒第二個引數大,則直接返回第一個引數)        select mod(1, 2), mod(3, 5), mod(22, 3), mod(5.5, 2) from dual;--sign (判斷一個數字或者是能轉成數字的字串是正數還是負數還是0,整數返回1,負數返回-1,0返回0)        select sign(-1), sign(-1.11), sign(0), sign(1), sign(1.1), sign('1'), sign('-1'), sign('0') from dual;--translate  --這個和replace是不一樣的,這個是一個字元一個字元的替換,replace是整體來看--就下面的這個例子來看,第二個引數abcdef,第三個引數是123,則表明我們要將第一個引數中的a全部替換成1,b全部替換成2,c全部替換成3,def由於在123中沒有和它匹配的則表明,我們要將第一個引數中的d,e,f都刪除 --這三個引數,任何一個為''空字串,返回的結果都是空字串        select translate('abcdefghij','abcdef','123'), translate('abcdefghij','','123'), translate('abcdefghij','abc','') from dual;