CHIL-ORACLE-函数
创建函数的的语法: create [or replace] function function_name [(param1,param2)] --函数名、参数 return param_type is|as --返回值类型 [local declarations] --变量声明 beginexecutable statements;return result; --返回值 exceptionexception handlers; end function_name9.1.TO_CHAR 将一个数值转换成与之等价的字符串.如果不指定格式,将转换成最简单的字符串形式.如果为负数就在前面加一个减号. 9.1.1.TO_CHAR(number[,format]) Oracle为数值提供了很多格式,下表列出了部分可接受的格式: 元素 描述 示例 值 结果 9 返回指定位数的数值,前面为0,显示为空格 99999 784 ‘ 784’9 返回指定位数的数值,前面为0,显示为空格 99999 -578 ‘ -578’9 返回指定位数的数值,前面为0,显示为空格 99999 1234567 ‘######’9 返回指定位数的数值,前面为0,显示为空格 99999 45.895 ‘ 46’9 插入小数点 9999.99 784 ‘784.00’9 插入小数点 9999.99 45.3482 ’45.35’9 在结果串的指定位置插入逗号 9,999,999 784 ‘ 784’9 在结果串的指定位置插入逗号 9,999,999 1234567 ‘1,234,567’9 在结果串的指定位置插入逗号 9,999,999 0.44 ‘ 0’ $ 返回值前面加一个元符号 $99,999 784 ‘$784’$ 返回值前面加一个元符号 $99,999 -578 ‘-$578’B 结果的整数部分如果是0,就显示成空格 B9999.9 784 ‘ 784.0’B 结果的整数部分如果是0,就显示成空格 B9999.9 0.44 ‘ .4’S 返回 有正负号的数值 S9999 784 ‘+784’ EEEE 以科 计数法表示数值 9.9EEEE 45 ‘ 4.5E+01’EEEE 以科 计数法表示数值 9.9EEEE 0.0666 ‘ 6.7E-02’ 9.1.2.TO_CHAR(date[,format])用途: 将按format参数指定的格式将日期值转换成相应的字符串形式.同样,Oracle提供许多的格式模型,用户可以用它们的组合来表示最终的输出格式.唯一限制就是最终的掩码不能超过22个字符.格式 意义 D 用数字表示星期几(1,2,3,4,5,6,7) DY 用三个字符表示星期几的缩写形式(MON) DAY 星期几的完整表示(MONDAY) DD 用数字表示一月中的几号 DDD 用数字表示年份中的天数 W 一月中的星期数 WW 一年中的星期数 MM 用数字表示月数 MON 用三个字母表示月的缩写(APR) MONTH 月的完整英文表示(FEBRUARY) Y 年份中的最后一个数字(9) YY 年份中的最后二个数字(99) YYY 年份中的最后三个数字(999) YYYY 年份用四个数字表示(1999) YEAR 年份的字母全部拼写(NINETEEN-NINETY-NINE) AM或PM 午前或午后表示符 HH 用小时表示日期 MI 分钟表示小时 SS 秒钟表示分钟 SSSS 自午夜以来的秒数(这个数字经常在0-86399之间) 9.1.3. TO_DATE(string,format)用途: 根据给定的格式将一个字符串转换成Oracle的日期值. 该函数的主要用途是用来验证输入的日期值.在应用程序中,用户必须验证输入日期是否有效,如月份是否在1~12之间和日期中的天数是否在指定月份的天数内. 9.2. TO_NUMBER(string[,format]) 用途: 该函数将一个字符串转换成相应的数值.对于简单的字符串转换数值(例如几位数字加上小数点).格式是可选的.9.3. ADD_MONTHS(date,number)用途: 在日期date上加指定的月数,返回一个新日期.如果给定为负数,返回值为日期date之前几个月的日期.number应当是个整数,如果是小数,正数被截为小于该数的最大整数,负数被截为大于该数的最小整数.--例如:SELECT TO_CHAR(ADD_MONTHS(sysdate,1),'DD-MON-YYYY') "Next month";FROM dualNext month ----------- 19-FEB-20009.4. LAST_DAY(date) 用途: 返回日期date所在月份的最后一天的日期. --例如: SELECT SYSDATE, LAST_DAY(SYSDATE) "Last",LAST_DAY(SYSDATE) - SYSDATE "Days Left" FROM DUAL SYSDATE Last Days Left --------- --------- ---------- 19-JAN-00 31-JAN-00 12 9.5. MONTHS_BETWEEN(date1,date2) 用途:返回两个日期之间的月份.如果两个日期月份内的天数相同(或者都是某个月的最后一天),返回值是整数.否则,返回值是小数,每于1/31月来计算月中剩余天数.如果第二个日期比第一个日期还早,则返回值是负数. --例如: SELECT MONTHS_BETWEEN(TO_DATE('02-02-1992', 'MM-DD-YYYY'), TO_DATE('01-01-1992', 'MM-DD-YYYY')) "Months" FROM DUAL Months ---------- 1.03225806--例如:SELECT MONTHS_BETWEEN(TO_DATE('02-29-1992', 'MM-DD-YYYY'), TO_DATE('01-31-1992', 'MM-DD-YYYY')) "Months" FROM DUAL Months ---------- 19.6.NEXT_DAY(date,day)用途:该函数返回日期date指定若天后的日期.注意:参数day必须为星期,可以星期几的英文完整拼写,或前三个字母缩写,或数字1,2,3,4,5,6,7分别表示星期日到星期六.例如,查询返回本月最后一个星期五的日期. --例如: SELECT NEXT_DAY((last_day(sysdate)-7),'FRIDAY')FROM dualNEXT_DAY( --------- 28-JAN-009.7. NEXT_DAY(date[,format]) 用途:该函数把一个日期四舍五入到最接近格式元素指定的形式.如果省略format,只返回date的日期部分.--例如,如果想把时间(24/01/00 14:58:41)四舍五入到最近的小时.下表显示了所有可用格式元素对日期的影响. Format Element Result SS 24/01/00 14:58:41 MI 24/01/00 14:59:00 HH 24/01/00 15:00:00 DD 25/01/00 00:00:00 MM 01/02/01 00:00:00 YY 01/01/00 00:00:00 CC 01/01/00 00:00:00 --例如: SELECT to_char(ROUND(sysdate,'HH'),'DD-MON-YY HH24:MI:SS')FROM dual TO_CHAR(ROUND(SYSDATE,'HH'),'DD-MON-YYHH24:MI:SS') ----------------------------------------------------------------- 24-JAN-00 15:00:00 9.8. TRUNC(date[,format]) 用途:TRUNC函数与ROUND很相似,它根据指定的格式掩码元素,只返回输入日期用户所关心的那部分,与ROUND有所不同,它删除更精确的时间部分,而不是将其四舍五入. --例如: SELECT TRUNC(sysdate)FROM dual TRUNC(SYS --------- 24-JAN-00 9.9. FLOOR 求两个日期之间的天数用; select floor(sysdate - to_date('20080805','yyyymmdd')) from dual; 9.10. ASCII(character) 用途:返回指定字符的ASCII码值.如果为字符串时,返回第一个字符的ASCII码值. --例如: SELECT ASCII('Z')FROM dual ASCII('Z') ---------- 90 9.11. CHR(number) 用途:该函数执行ASCII函数的反操作,返回其ASCII码值等于数值number的字符.该函数通常用于向字符串中添加不可打印字符. --例如: SELECT CHR(65)||'BCDEF' FROM dualCHR(65 ------ ABCDEF9.12. CONCAT(string1,string2) 用途:该函数用于连接两个字符串,将string2跟在string1后面返回,它等价于连接操作符(||). --例如: SELECT CONCAT(‘This is a’,’ computer’) FROM dual CONCAT('THISISA', ------------------ This is a computer它也可以写成这样: SELECT ‘This is a’||’computer’ FROM dual 'THISISA'||'COMPUT' ------------------ This is a computer 这两个语句的结果是完全相同的,但应尽可能地使用||操作符. 9.13. INITCAP(string) 用途:该函数将字符串string中每个单词的第1个字母变成大写字母,其它字符为小写字母.--例如: SELECT INITCAP(first_name||'.'||last_name) FROM employee WHERE department_id=12 INITCAP(FIRST_NAME||'.'||LAST_N ------------------------------- Chris.Alberts Matthew.Fisher Grace.Roberts Michael.Douglas 9.14. INSTR(input_string,search_string[,n[,m]]) 用途:该函数是从字符串input_string的第n个字符开始查找搜索字符串的第m次出现,如果没有找到搜索的字符串,函数将返回0.如果找到,函数将返回位置. --例如: SELECT INSTR('the quick sly fox jumped over the lazy brown dog','the',2,1) FROM dual INSTR('THEQUICKSLYFOXJUMPEDOVERTHELAZYBROWNDOG','THE',2,1) ---------------------------------------------------------- 9.15. INSTRB(input_string,search_string[,n[,m]]) 用途:该函数类似于INSTR函数,不同之处在于INSTRB函数返回搜索字符串出现的字节数,而不是字符数.在NLS字符集中仅包含单字符时,INSTRB函数和INSTR函数是完全相同的. 9.16. LENGTH(string) 用途:该函数用于返回输入字符串的字符数.返回的长度并非字段所定义的长度,而只是字段中占满字符的部分.以列实例中,字段first_name定义为varchar2(15). --语法: SELECT first_name,LENGTH(first_name) FROM employee FIRST_NAME LENGTH(FIRST_NAME) --------------- ------------------ JOHN 4 KEVIN 5 9.17. LENGTHB(string) 用途:该函数用于返回输入字符串的字节数.对于只包含单字节字符的字符集来说LENGTHB函数和LENGTH函数完全一样. 9.18. LOWER(string) 用途:该函数将字符串string全部转换为小写字母,对于数字和其它非字母字符,不执行任何转换. 9.19. UPPER(string) 用途: 该函数将字符串string全部转换为大写字母,对于数字和其它非字母字符,不执行任何转换. 9.20. LPAD(string,length[,’set’]) 用途:在字符串string的左边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符. --例如: SELECT first_name,LPAD(first_name,20,' ') FROM employee FIRST_NAME LPAD(FIRST_NAME,20,'') --------------- ----------------------------------------- JOHN JOHN KEVIN KEVIN 9.21. RPAD(string,length[,’set’]) 用途:在字符串string的右边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符. --例如: SELECT first_name,rpad(first_name,20,'-') FROM employee FIRST_NAME RPAD(FIRST_NAME,20,'-') --------------- ----------------------------------------- JOHN JOHN---------------- KEVIN KEVIN--------------- 9.22. LTRIM(string[,’set’]) 用途:该函数从字符串的左边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止. --例如: SELECT first_name,ltrim(first_name,'BA') FROM employee WHERE first_name='BARBARA'FIRST_NAME LTRIM(FIRST_NAM --------------- --------------- BARBARA RBARA 9.23. RTRIM(string[,’set’]) 用途:该函数从字符串的右边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止.具有NULL值的字段不能与具有空白字符的字段相比较. 这是因为空白字符与NULL字符是完全不同的两种字符.该函数的另外一个用途是当进行字段连接时去掉不需要的字符. 9.24. SUBSTR(string,start[,length]) 用途:该函数从输入字符串中取出一个子串,从start字符处开始取指定长度的字符串,如果不指定长度,返回从start字符处开始至字符串的末尾. 9.25. REPLACE(string,search_set[,replace_set]) 用途:该函数将字符串中所有出现的search_set都替换成replace_set字符串.可以使用该函将字符串中所有出现的符号都替换成某个有效的名字.如果不指定replace_set,则将从字符串string中删除所有的搜索字符串search_set. --例如: SELECT REPLACE('abcdefbdcdabc,dsssdcdrd','abc','ABC') FROM dual REPLACE('ABCDEFBDCDABC', ----------------------- ABCdefbdcdABC,dsssdcdrd 9.26. TRANSLATE(string,search_set,replace_set) 用途:该函数用于将所有出现在搜索字符集search_set中的字符转换成替换字符集replace_set中的相应字符.注意:如果字符串string中的某个字符没有出现在搜索字符集中.则它将原封不动地返回.如果替换字符集replace_set比搜索字符集search_set小,那么搜索字符集search_set中后面的字符串将从字符串string中删除. --例如: SELECT TRANSLATE('GYK-87M','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',9999999999xxxxxxxxxxxxxx) FROM dualTRANSL ------ xx-99x 9.27. ABS(number) 用途:该函数返回数值number的绝对值.绝对值就是一个数去掉符号的那部分. 9.28. SQRT(number)用途:该函数返回数值number的帄方根,输入值必须大于等于0,否则返回错误. 9.29. CEIL(number) 用途:该函数返回大于等于输入值的下一个整数. 9.30. FLOOR(number) 用途:该函数返回小于等于number的最大整数.9.31. MOD(n,m) 用途:该函数返回n除m的模,结果是n除m的剩余部分.m,n可以是小数,负数. 9.32. POWER(x,y) 用途:该函数执行LOG函数的反操作,返回x的y次方. 9.33. ROUND(number,decimal_digits) 用途:该函数将数值number四舍五入到指定的小数位.如果decimal_digits为0,则返回整数.decimal_digits可以为负数. 9.34. TRUNC(number[,decimal_pluces]) 用途:该函数在指定的小数字上把一个数值截掉.如果不指定精度,函数预设精度为0. decimal_pluces可以为负数.9.35. SIGN(number) 用途:该函数返回number的符号,如果number为正数则返回1,为负数则返回-1,为0则返回0. 9.36. SIN(number) 用途:该函数返回弧度number的正弦值. 9.37. SINH(number) 用途:该函数返回number的返正弦值. 9.38. COS(number) 用途:该函数返回弧度number的三角余弦值.要用角度计算余弦,可以将输入值乘以0.01745转换成弧度后再计算. 9.39. COSH(number) 用途:该函数返回输入值的反余弦值. 9.40. TAN(number) 用途:该函数返回弧度number的正切值. 9.41. TANH(number) 用途:该函数返回数值number的反正切值. 9.42. LN(number) 用途:该函数返回number自然对数. 9.43. EXP(number) 用途:该函数返回e(2.71828183)的number次方.该函数执行自然对数的反过程. 9.44. LOG(base,number) 用途:该函数返回base为底,输入值number的对数. 单行函数: 单行函数中可以对任何数据类型的数据进行操作.9.45. DUMP(expression[,format[,start[,length]]]) 用途:该函数按指定的格式显示输入数据的内部表示.下表列出了有效的格式.格式代码 描述 8 八进制 10 十进制 16 十六进制 17 单字符--例如: SELECT DUMP('FARRELL',16) FROM dual DUMP('FARRELL',16) ---------------------------------- Typ=96 Len=7: 46,41,52,52,45,4c,4c 9.46. GREATEST(list of values) 用途:该函数返回列表中项的最大值.对数值或日期来说,返回值是最大值或最晚日期,如果列表中包含字符串,返回值是按字母顺序列表中的最后一项. --例如: SELECT GREATEST(123,234,432,112) FROM dualGREATEST(123,234,432,112) ------------------------- 9.47. LEAST(list of values) 用途:该函数返回列表中项的最小值.对数值或日期来说,返回值是最小值或最早日期,如果列表中包含字符串,返回值是按字母顺序列表中的第一项. --例如: SELECT LEAST(sysdate,sysdate-10) FROM dual LEAST(SYS --------- 10-JAN-00 9.48 NVL(expression,replacement_value) 用途:如果表达式不为空值,函数返回该表达式的值,如果是空值,就返回用来替换的值. --例如: SELECT last_name, NVL(TO_CHAR(COMMISSION),'NOT APPLICABLE') FROM employee WHERE department_id=30 LAST_NAME NVL(TO_CHAR(COMMISSION),'NOTAPPLICABLE') --------------- ---------------------------------------- ALLEN 300 WARD 500 MARTIN 1400 BLAKE NOT APPLICABLE 多行函数 组函数可以对表达式的所有值操作,也可以只对其中不同值进行操作,组函数的语法如下所示: 9.49. function[DISTINCT|ALL expression] 如果既不指定DISTINCT,也不指定ALL,函数将对查询返回的所有数据行进行操作.不能在同一个SELECT语句的选择列中同时使用组函数和单行函数. 9.50. AVG([DISTINCT|ALL] expression) 用途:对查询返回的数据行求帄均值. --例如: SELECT AVG(sal) "Average" FROM emp Average ---------- 2073.21429 9.51. COUNT([DISTINCT|ALL] expression)用途:计算表达式的个数.要计算EMP表中雇员的个数. --例如: SELECT COUNT(deptno) FROM emp COUNT(DEPTNO) ------------- 14 SELECT COUNT(distinct deptno) FROM empCOUNT(DISTINCTDEPTNO) --------------------- 9.52. MAX([DISTINCT|ALL] expression) 用途:对查询返回的行集求最大值.如果有多个最大值,将所有均返回.要检索公司中最高工资的雇员. 语法: SELECT ename,sal FROM emp WHERE sal=(select max(sal) FROM emp) ENAME SAL ---------- --------- KING 5000 9.53. MIN([DISTINCT|ALL] expression) 用途:对查询返回的行集求最小值.如果有多个最小值,将所有均返回. --例如: SELECT MIN(last_name) FROM employee MIN(LAST_NAME) --------------- ADAMS 9.54. SUM([DISTINCT|ALL] expression) 用途:计算查询返回的所有非空数值的总和.如果返回的数据都是空值,则该函数也返回空值. --例如: SELECT SUM(salary)"Total" FROM employee WHERE department_id=10 Total --------- 8750 9.55. VARIANCE([DISTINCT|ALL] expression) 用途:该函数计算返回所有行的统计方差.--例如: SELECT VARIANCE(salary) FROM employee VARIANCE(SALARY) ---------------- 973659.27字符函数: 数据库字符集与X等价数值 :Chr(x) 相反函数:ASCII select Chr('65') from dual;select ASCII('A') from dual;连接字符串:concat(string 1,string2) 常用||替代select concat('123','456') from dual;select '123'||'456'||'789' from dual去空格: trim(string)\LTRIM\RTRIM select length(trim(' 12 123 ')) from dual;select length(LTRIM(' 12 123 ')) from dual; select LTRIM(' 12 123 ') from dual; select RTRIM(' 12 123 ') from dual;大小写转换 UPPER 和 LOWER select UPPER('aaa') from dual; select LOWER('AAA') from dual;首字母大写:INITCAP(enam)\NLS_INICAP 只有首字母大写select INITCAP('NLS_INICAP') from dual;字符串截取:substr() -- select 'ABCDEFG',substr('ABCDEFG',2,3) from dual -- SELECT 'ABCDEFG',SUBSTR('ABCDEFG',-3,3) FROM DUAL;字符串长度:length() select length('1234567') from dual;内容替换:replace() select replace('ASDFF','ASD','F')from dual;内容比较替换:TRANSLATE(string ,string1,string2)select TRANSLATE('ASDFGHJKL','ASDFGH','q') from dual; ------------- 分析函数 over max(personincome) over(partition by earnmonth,area) 最高值 Min(personincome) over(partition by earnmonth,area) 最低值avg(personincome) over(partition by earnmonth,area) 平均值sum(personincome) over(partition by earnmonth,area) 总额 aLL表示对所有,distinct表示对不同的值求最大值,相同的只取一次常用的聚合函数 AVG,MAX,MIN,COUNT,SUM select from dual;select a.empsalary,mod(empsalary,5) from emp a; select * from emp ; select ('13500.00'+'20060.00')/2 from dual; --16780 SUM(DISTINCT|ALL column) 求和 AVG(DISTINCT|ALL column) 平均 MAX(DISTINCT|ALL column) 最大 MIN(DISTINCT|ALL column) 最小 COUNT(DISTINCT|ALL column) 统计 count(*)和count(1) MEDIAN 求中位数VARIANCE(DISTINCT|ALL column) 方差STDDEV(distinct|all column) 标准差------------- 四舍五入:ROUND() 2、截断小数位:TRUNC() 3、取余(取模):MOD SELECT ROUND(789.536) FROM dual;【1】保留2位小数,(如果是-2则对整数进行四舍五入,变为800了)SELECT ROUND(783.569,2) FROM dual;【2】使用MOD()函数进行取余操作 SELECT MOD(10,2) FROM dual;转换函数: 1、TO_CHAR(): 将日期或数值转换成字符串 2、TO_NUMBER():将字符串转换成数字 3、TO_DATE(): 将字符串转换成日期select TO_DATE('20170208','YYYYMMDD') from DUAL;SELECT SYSDATE FROM dual;Oracle提供了以下的日期函数支持:MONTHS_BETWEEN():求出给定日期范围的月数 ADD_MONTHS():在指定日期上加上指定的月数,求出之后的日期 NEXT_DAY():下一个的今天的日期 LAST_DAY():求出给定日期的最后一天日期select MONTHS_BETWEEN(SYSDATE,TO_DATE('20170208','YYYYMMDD')) from dual;select ADD_MONTHS(SYSDATE,1) from dual; select NEXT_DAY(SYSDATE,2) from dual;select LAST_DAY(SYSDATE) from dual;select sysdate from dual;--返回字符串首字母变成大写 select initcap(t.prod_code) from subs.inf_group t;--在一个字符串中搜索指定字符。--instr(被搜索字符串,指定字符串,开始搜索的位置,搜索第几个指定字符) select instr('oraclerasdf','ra',1,2) from dual;--返回字符串的长度 select length('aaaa') from dual;--返回字符串并且将所有的字符小写 select lower('ASDFGHJ') FROM DUAL;--返回字符串并且将所有的字符大写 select upper('asdfghj') FROM DUAL;--在字符右边添加字符rpad(被添加添加的字符,添加字符后的总位数,添加的字符) --在字符左边添加字符lpad(被添加添加的字符,添加字符后的总位数,添加的字符) select lpad(rpad('aaa',10,'*'),17,'*') from dual;--删除右边的字符串rtrim(字符串,删除的部分) select rtrim('gao qian jing','ing') from dual;--删除左边的字符串rtrim(字符串,删除的部分) select ltrim('gao qian jing','gao') from dual;--截取字符串substr('字符串',开始的位置,截取字符串的长度)开始的位置坐标从1开始 select substr('abcdefghijklmnopqistuvwxyz',3,4) from dual;--替换字符串replace(字符串,被替换的字符串,要替换的字符串) select replace('he love you','he','i') from dual;--返回指定值的绝对值 select abs(-100) from dual;--返回一个大于或等于的整数 select ceil(3.0001) from dual;--对给定的数据取整 select floor(2.67) from dual;--mod(n1,n2)返回一个n1除以n2的余数 select mod(13,4) from dual;--power(n1,n2)返回n1的n2次方根 select power(3,3) from dual;--按照指定的精度进行舍入 select round(1.5),round(1.4),trunc(1.5),trunc(1.4) from dual;--比较数字,大于0返回1,小于0返回-1,等于0返回0 select sign(123),sign(-123),sign(0) from dual;--返回数字的根 select sqrt(9),sqrt(4) from dual;--按照指定的精度截取一个数 select trunc(123.1666,-1),trunc(123.1666,2) from dual;--增加或减去月份 select to_char(add_months(to_date('1999-12-07','yyyy-mm-dd'),-3),'yyyy-mm-dd') from dual;--返回日期的最后一天 select last_day(to_date('1999-12-07','yyyy-mm-dd')) from dual;--返回两个日期相差的月数 select months_between(to_date('1999-1-08','yyyy-mm-dd'), to_date('1999-3-07','yyyy-mm-dd')) from dual;--desc对查询结果进行从大到小的排序 select * from subs.inf_group c order by c.group_id asc;--nvl(n1,n2) n1为null返回n2 n1不为null返回n1 --nvl2(n1,n2,n3) n1为null返回n2,n2为null返回n3,n2和n3类型不同,n3会转换成n2类型 --nullif(n1,n2) 相等返回null,不相等返回n1 在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个:DBMS_RANDOM.VALUE函数该函数用来产生一个随机数,有两种用法:1. 产生一个介于0和1之间(不包含0和1)的38位精度的随机数,这种用法不包含参数,语法为:DBMS_RANDOM.VALUE RETURN NUMBER; 2. 产生一个介于指定范围之内的38位精度的随机数,语法为:DBMS_RANDOM.VALUE(low IN NUMBER,high IN NUMBER) RETURN NUMBER; 这种用法包含两参数,参数low用来指定要生成的随机数的下限,参数high指定上限,生成的随机。 请注意生成的随机数有可能等于下限,但绝对小于上限,即“low<=随机数<high”。例如: 要产生一个1到100之间的数可以这样写: DBMS_RANDOM.VALUE(1,100) DBMS_RANDOM.STRING函数该函数产生一个随机字符串,语法为:DBMS_RANDOM.STRING (opt IN CHAR,len IN NUMBER) RETURN VARCHAR2;len :指定生成的字符串的长度。opt:指定生成的字符串的样式,允许的取值及其表示的含义如下表所示:‘u’或’U’ : 返回一个由大写字母组成的字符串‘l’或’L’ : 返回一个由小写字母组成的字符串‘a’或’A’ : 返回一个由大写字母和小写字母组成的字符串‘x’或’X’ : 返回一个由大写字母和数字组成的字符串‘p’或’P’ : 返回一个由任意的可打印字符组成的字符串例如: 要产生一个长度为6且只包括大写字母的字符串,可以这样写: DBMS—RANDOM.STRING('U',6)复制代码 1、从表中随机取记录select * from (select * from staff order by dbms_random.random)where rownum < 4表示从STAFF表中随机取3条记录2、产生随机数SELECT DBMS_RANDOM.RANDOM FROM DUAL;产生一个任意大小的随机数SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) FROM DUAL;产生一个100以内的随机数SELECT TRUNC(100+900*dbms_random.value) FROM dual;产生一个100~1000之间的随机数SELECT dbms_random.value FROM dual;产生一个0~1之间的随机数SELECT dbms_random.value(10,20) FROM dual;产生一个10~20之间的随机数SELECT dbms_random.normal FROM dual;NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。 3、产生随机字符串select dbms_random.string('P',20) from dual;第一个参数 P 表示 printable,即字符串由任意可打印字符构成第二个参数表示返回字符串长度 4、ceil( n )函数是返回大于或等于n的最小整数。 DBMS_RANDOM.VALUE()是随机产生( 0,1 )之间的数。 要产生两位的随机数,可以DBMS_RANDOM.VALUE()*100,这样产生( 0,100 ) 的随机数,当产生( 0,10)之间的数时,只要加上10就可以保证产生的数都是两位了。 ORACLE的PL/SQL提供了生成随机数和随机字符串的多种方式,罗列如下:1、小数( 0 ~ 1)select dbms_random.value from dual2、指定范围内的小数 ( 0 ~ 100 )select dbms_random.value(0,100) from dual3、指定范围内的整数 ( 0 ~ 100 )select trunc(dbms_random.value(0,100)) from dual4、长度为20的随机数字串select substr(cast(dbms_random.value as varchar2(38)),3,20) from dual5、正态分布的随机数select dbms_random.normal from dual6、随机字符串select dbms_random.string(opt, length) from dualopt可取值如下:'u','U' : 大写字母'l','L' : 小写字母'a','A' : 大、小写字母'x','X' : 数字、大写字母'p','P' : 可打印字符7、随机日期select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J') from dual通过下面的语句获得指定日期的基数select to_char(sysdate,'J') from dual8、生成GUIDselect sys_guid() from dual--生成带分隔符(-)的GUID的自定义函数 create or replace function my_guid return varchar2 isguid varchar(36);temp varchar(32); begintemp:=sys_guid();guid:= substr(temp,1,8) || '-'||substr(temp,9,4) || '-'||substr(temp,13,4)|| '-'||substr(temp,17,4)|| '-'||substr(temp,21,12);return guid; end; /oracle中substr函数的用法 1、substr(string string, int a, int b) 参数1:string 要处理的字符串 参数2:a 截取字符串的开始位置(起始位置是0) 参数3:b 截取的字符串的长度(而不是字符串的结束位置) 例如: substr("ABCDEFG", 0); //返回:ABCDEFG,截取所有字符 substr("ABCDEFG", 2); //返回:CDEFG,截取从C开始之后所有字符 substr("ABCDEFG", 0, 3); //返回:ABC,截取从A开始3个字符 substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。 substr("ABCDEFG", -3, 3); //返回:EFG,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。 2、substr(string string, int a) 参数1:string 要处理的字符串 参数2:a 可以理解为从索引a(注意:起始索引是0)处开始截取字符串,也可以理解为从第 (a+1)个字符开始截取字符串。 例如: substr("ABCDEFG", 0); //返回:ABCDEFG, 截取所有字符 substr("ABCDEFG", 2); //返回:CDEFG,截取从C开始之后所有字符INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始到字符的结尾就结束。语法如下:instr( string1, string2 [, start_position [, nth_appearance ] ] )参数分析:string1源字符串,要在此字符串中查找。string2要在string1中查找的字符串.start_position代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。nth_appearance代表要查找第几次出现的string2的位置. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。注意:如果String2在String1中没有找到,instr函数返回0.示例:select instr('121221222122221','1',1,1) from dual; 返回:1 select instr('121221222122221','1',1,2) from dual; 返回:3 select instr('121221222122221','1',1,3) from dual; 返回:6 select instr('121221222122221','1',1,4) from dual; 返回:10 select instr('121221222122221','1',1,5) from dual; 返回:15 select instr('121221222122221','1',1,6) from dual; 返回:0select instr('121221222122221','12',1,1) from dual; 返回:1 select instr('121221222122221','12',1,2) from dual; 返回:3 select instr('121221222122221','12',1,3) from dual; 返回:6 select instr('121221222122221','12',1,4) from dual; 返回:10 select instr('121221222122221','12',1,5) from dual; 返回:0 select instr('121221222122221','12',1,6) from dual; 返回:0SELECT instr('syranmo','s') FROM dual; -- 返回 1SELECT instr('syranmo','ra') FROM dual; -- 返回 31 SELECT instr('syran mo','a',1,2) FROM dual; -- 返回 0 (根据条件,由于a只出现一次,第四个参数2,就是说第2次出现a的位置,显然第2次是没有再出现了,所以结果返回0。注意空格也算一个字符!)SELECT instr('syranmo','an',-1,1) FROM dual; -- 返回 4 (就算是由右到左数,索引的位置还是要看‘an’的左边第一个字母的位置,所以这里返回4)SELECT instr('abc','d') FROM dual; -- 返回 0 注:也可利用此函数来检查String1中是否包含String2,如果返回0表示不包含,否则表示包含。对于上面说到的,我们可以这样运用instr函数。请看下面示例:如果我有一份资料,上面都是一些员工的工号(字段:CODE),可是我现在要查询出他们的所有员工情况,例如名字,部门,职业等等,这里举例是两个员工,工号分别是’A10001′,’A10002′,其中假设staff是员工表,那正常的做法就如下:1 2 SELECT code , name , dept, occupation FROM staff WHERE code IN ('A10001','A10002');或者:SELECT code , name , dept, occupation FROM staff WHERE code = 'A10001' OR code = 'A10002';有时候员工比较多,我们对于那个’觉得比较麻烦,于是就想,可以一次性导出来么?这时候你就可以用instr函数,如下:SELECT code , name , dept, occupation FROM staff WHERE instr('A10001,A10002',code)>0;查询出来结果一样,这样前后只用到两次单引号,相对方便点。还有一个用法,如下:SELECT code, name, dept, occupation FROM staff WHERE instr(code, '001') > 0;等同于SELECT code, name, dept, occupation FROM staff WHERE code LIKE '%001%' ;--生成随即字符dbms_random.string(选项,长度);--选项:u表示大写字母,L表示小写字母,x表示数字和字母混合,p表示任意字符--随机生成数字:语法1:dbms_random.value; 生成0-1之间随机数--dbms_random.value*num; 生成0到num之间的随机数--dbms_random.value(min,max);生成min到max之间的随机数--随机数取整:round(dbms_random.value(min,max)); 生成min到max之间的随机整数--随机数取整:trunc(dbms_random.value(min,max)); 生成min到max之间的随机整数--随机获取13100000000~18999999999之间的数字(也就是131到189之间的手机号码) select trunc(dbms_random.value(13100000000,18999999999)) from dual;自定义函数: create or replace function fun_kiki_emp_avg_sal(v_department emp.department%type)return number is /* *(3)创建一个函数,以部门号为参数,返回该部门的平均工资。 */ v_avg_sal emp.sal%type; beginselect avg(sal) into v_avg_sal from emp where department=v_department;return v_avg_sal; end;--测试1 declarev_no number:=0; beginv_no:=fun_kiki_emp_avg_sal(10);dbms_output.put_line(v_no); end; --------------------------- 18579.9218--测试2 select fun_kiki_emp_avg_sal(10) from dual; ----------------------------------- 18579.9218
转载于:https://www.cnblogs.com/ChineseIntelligentLanguage/p/6513332.html
CHIL-ORACLE-函数相关推荐
- mybatis可以用oracle,使用MyBatis调用oracle函数(基于注释)
我需要使用注解在MyBatis中调用Oracle函数.使用MyBatis调用oracle函数(基于注释) 我的映射: @Select("{ CALL #{outParam, jdbcType ...
- oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...
我有兴趣知道是否有任何MySQL / Oracle函数给增量号.在另一列相似的值的基础上的一列? 就像在我的下面的代码中,我有order_primary列,其中包含订单号.所以基于此我们可以确定有多少 ...
- 使用oracle 游标修改数据,Oracle 函数施行修改和游标传递
Oracle 函数执行修改和游标传递 ORA-14551:不能在查询语句中执行dml语句,开始误以为函数里不能执行DML或DDL语句,后查到前辈通过采用自治事务解决,在此基础上演例 传递SQL语句对数 ...
- oracle 函数索引
http://bbs.51cto.com/thread-26271-1.html 如何创建oracle函数索引 Oracle8i的很重要的一个新特性就是增加了function-based index这 ...
- oracle+查询主机地址,oracle函数:获取Internet主机名和ip地址
您可能感兴趣的话题: Oracle 核心提示:oracle函数获取Internet主机名和ip地址 Oracle包utl_inaddr 作用:用于取得局域网或Internet环境中的主机名和IP地址. ...
- row number函数 oracle,oracle函数 ROW_NUMBER()
[语法]ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) [功能]表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后 ...
- [转载]oracle函数listagg的使用说明
工作中经常遇到很多需求是这样的,根据条件汇总某些字段,比如我遇到的是,我们公司有三个投资平台,同一个客户拿手机号在三个平台都注册了,但注册过的用户名不一样,显示的时候需要根据手机号显示所有注册过的名称 ...
- jdbc oracle 函数,Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数
1.存储过程 1.1.准备SQL-- 定义存储过程 create or replace procedure get_rax(salary in number,rax out number) as -- ...
- oracle函数建立码值,Oracle函数与存储过程
1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 D ...
- oracle强大函数,oracle 函数排行
oracle 函数排名 SQL> SELECT empno,ename,sal,rank() over(ORDER BY nvl(sal,0) DESC) 排序 from emp; EMPNO ...
最新文章
- libgdx学习记录9——FreeType,ttf中文显示
- springboot整合rabbitmq(搭建)
- 达不达标的公式计算机,“我面试了几十个大学生都不达标,连这3个Excel公式都看不懂”...
- spring简单入门,入门案列的执行流程,图例
- python 粒子动画_python-盒子中有很多粒子-物理模拟
- php中 和 的优先级,理解php中的运算符优先级
- phpcmsV9支付: 支付宝支付配置 (资源汇总)
- 基于微信小程序的医院预约挂号系统设计与实现 毕业设计论文 课题题目参考(2)后台管理功能和界面效果
- NLP之分词技术理论
- 学校计算机社团面试问题及答案,社团二轮面试题目
- Google Play 商品详情,考试内容
- 帆软(FineReport)---- 数据决策系统的基本配置
- 人工智能越来越“能”
- 辞职后五险一金怎么办?史上最全处理办法汇总-千氪
- WPM2026 P沟道增强型MOS场效应晶体管
- 此证书的签发者无效解决办法
- Asia's pollution exodus: Firms struggle to woo top talent 逃离亚洲空气污染:企业难以吸引顶尖人才
- W10打开bat文件一闪就没了
- 百度网盘:申诉已受理,预计72小时内完成审核与处理
- 《现代控制理论》绪论
热门文章
- 输出总结是成长的开始
- 如何免费下载word文档
- spring redis cluster Lettuce 拓扑刷新
- 学好python工资一般多少钱-从初学Python到月薪15K,认真看完这三本书足以
- 2022-2028全球及中国监管技术(RegTech)行业研究及十四五规划分析报告
- CTF——Web网站备份源码泄露
- 榜单发布!2020年乘用车前装T-BOX搭载量TOP10供应商
- USB Camera摄像头
- android高德地图改变绘制点标记位置,绘制点标记-在地图上绘制-开发指南-Android 室内地图SDK | 高德地图API...
- 腾讯广告算法大赛2020赛题初探坑