创建函数的的语法:
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-函数相关推荐

  1. mybatis可以用oracle,使用MyBatis调用oracle函数(基于注释)

    我需要使用注解在MyBatis中调用Oracle函数.使用MyBatis调用oracle函数(基于注释) 我的映射: @Select("{ CALL #{outParam, jdbcType ...

  2. oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...

    我有兴趣知道是否有任何MySQL / Oracle函数给增量号.在另一列相似的值的基础上的一列? 就像在我的下面的代码中,我有order_primary列,其中包含订单号.所以基于此我们可以确定有多少 ...

  3. 使用oracle 游标修改数据,Oracle 函数施行修改和游标传递

    Oracle 函数执行修改和游标传递 ORA-14551:不能在查询语句中执行dml语句,开始误以为函数里不能执行DML或DDL语句,后查到前辈通过采用自治事务解决,在此基础上演例 传递SQL语句对数 ...

  4. oracle 函数索引

    http://bbs.51cto.com/thread-26271-1.html 如何创建oracle函数索引 Oracle8i的很重要的一个新特性就是增加了function-based index这 ...

  5. oracle+查询主机地址,oracle函数:获取Internet主机名和ip地址

    您可能感兴趣的话题: Oracle 核心提示:oracle函数获取Internet主机名和ip地址 Oracle包utl_inaddr 作用:用于取得局域网或Internet环境中的主机名和IP地址. ...

  6. row number函数 oracle,oracle函数 ROW_NUMBER()

    [语法]ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) [功能]表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后 ...

  7. [转载]oracle函数listagg的使用说明

    工作中经常遇到很多需求是这样的,根据条件汇总某些字段,比如我遇到的是,我们公司有三个投资平台,同一个客户拿手机号在三个平台都注册了,但注册过的用户名不一样,显示的时候需要根据手机号显示所有注册过的名称 ...

  8. jdbc oracle 函数,Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数

    1.存储过程 1.1.准备SQL-- 定义存储过程 create or replace procedure get_rax(salary in number,rax out number) as -- ...

  9. oracle函数建立码值,Oracle函数与存储过程

    1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 D ...

  10. oracle强大函数,oracle 函数排行

    oracle 函数排名 SQL> SELECT empno,ename,sal,rank() over(ORDER BY nvl(sal,0) DESC) 排序 from emp; EMPNO ...

最新文章

  1. libgdx学习记录9——FreeType,ttf中文显示
  2. springboot整合rabbitmq(搭建)
  3. 达不达标的公式计算机,“我面试了几十个大学生都不达标,连这3个Excel公式都看不懂”...
  4. spring简单入门,入门案列的执行流程,图例
  5. python 粒子动画_python-盒子中有很多粒子-物理模拟
  6. php中 和 的优先级,理解php中的运算符优先级
  7. phpcmsV9支付: 支付宝支付配置 (资源汇总)
  8. 基于微信小程序的医院预约挂号系统设计与实现 毕业设计论文 课题题目参考(2)后台管理功能和界面效果
  9. NLP之分词技术理论
  10. 学校计算机社团面试问题及答案,社团二轮面试题目
  11. Google Play 商品详情,考试内容
  12. 帆软(FineReport)---- 数据决策系统的基本配置
  13. 人工智能越来越“能”
  14. 辞职后五险一金怎么办?史上最全处理办法汇总-千氪
  15. WPM2026 P沟道增强型MOS场效应晶体管
  16. 此证书的签发者无效解决办法
  17. Asia's pollution exodus: Firms struggle to woo top talent 逃离亚洲空气污染:企业难以吸引顶尖人才
  18. W10打开bat文件一闪就没了
  19. 百度网盘:申诉已受理,预计72小时内完成审核与处理
  20. 《现代控制理论》绪论

热门文章

  1. 输出总结是成长的开始
  2. 如何免费下载word文档
  3. spring redis cluster Lettuce 拓扑刷新
  4. 学好python工资一般多少钱-从初学Python到月薪15K,认真看完这三本书足以
  5. 2022-2028全球及中国监管技术(RegTech)行业研究及十四五规划分析报告
  6. CTF——Web网站备份源码泄露
  7. 榜单发布!2020年乘用车前装T-BOX搭载量TOP10供应商
  8. USB Camera摄像头
  9. android高德地图改变绘制点标记位置,绘制点标记-在地图上绘制-开发指南-Android 室内地图SDK | 高德地图API...
  10. 腾讯广告算法大赛2020赛题初探坑