Oracle 常用函数
一、大小写转换函数LOWERLOWER函数用小写形式替换字符串中的大写字符。语法:LOWER(s). select lower(100+100),lower('SQL'),lower(sysdate) from dual; UPPERUPPER函数用大写形式替换字符串中的小写字符。语法:UPPER(s). select upper('sql') from dual; INITCAPINITCAP函数将字符串转换为首字母大写的形式。字符串中每个单词的第一个字母都被转换为大写形式,面每个单词余下的字母被转换为小写字母形式。单词之间用空格或者下划线分开,但有些字符(如百分比符号(%)、感叹号(!)或者美元符号($))也都是有效的单词分隔符。标点符号和特殊字符也是有效的单词分隔符。语法:INITCAP(s) select initcap('init cap or init_cat or init%cap') from dual; 二、字符操作函数CONCATCONCAT函数连接两个字符字面值、列或者表达式从而生成一个更大的字字符表达式。语法:CONCAT(s1,s2) select concat('Today is:',SYSDATE) FROM DUAL; CONCAT只能使用两个参数 select concat('Outer1 ',concat('Inner1',' Inner2')) from dual; LENGTHLENGTH函数返回组成字符串的字符数。空格、制表符和特殊字符都被LENGTH函数计算在内。只有一个参数,LENGTH(s)。(制表符算1) select length('ab cd e') from dual; LPAD和RPADLPAD(RPAD)函数返回给定字符串左(右)边填充指定数量的字符后形成的合成字符串。用于填充的字符串包括字符字面值、列值、表达式、空格(默认)、制表符和特殊字符。 LPAD和RPAD函数有三个参数,语法:RPAD(s,n,p)和LPAD(s,p)。s表示源字符串,n表示返回字符串的最终长度,p指定用于填充的字符串。 select LPAD('abc',6,'*'),RPAD('abc','*') from dual; TRIMTRIM函数从字符值的开头或结尾删除一些字符,从面生成一个更简短的字符项。 TRIM函数使用的参数由一个强制组成部分和一个可选组成部分构成。语法:TRIM([trailing|leading|both] trimstring from s)。被修整的字符串(s)是强制的。只能指定一个修正字符。 TRIM(s)删除输入字符串两边的空格。 TRIM(trailing trimstring from s)从字符串s的结尾删除所有trimstring(如果存在的话)。 TRIM(leading trimstring from s)从字符串s的开头删除所有trimstring(如果存在的话)。 TRIM(both trimstring from s)从字符串s的开头和结尾删除所有trimstring(如果存在的话)。 select trim(both '*' from '*****Hidden*****'),trim(leading '*' from '*****Hidden*****'),trim(trailing '*' from '*****Hidden*****'),trim(both from ' Hidden '),trim(trailing from ' Hidden'),trim(leading from 'Hidden ') from dual; RTRIM RTRIM函数从字符值的结尾删除一些字符,从而生成一个更简短的字符串。 LTRIM LTRIM函数从字符值的开头删除一些字符,从而生成一个更简短的字符串。 INSTRINSTR函数确定搜索字符串在给定字符串内的位置。它返回数字位置,在这个位置上,搜索字符串开始第n次出现(相对于指定的起始位置而言)。如果搜索字符串不存在,则返回0. INSTR函数使用两个可选参数和两个强制参数。语法:INSTR(source string,search string,[search start position],[nth occurrence])。search start position的默认值是1或者source string的开头。nth occurrence的默认值是1或者第一次出现。 select instr('1#3#5#7#9#','#') from dual; 从左第1个字符往右,返回'#'第1次出现的位置。 select instr('1#3#5#7#9#','#',5) from dual; 从左第5个字符往右,返回'#'第1次出现的位置。 select instr('1#3#5#7#9#',3,4) from dual; 从左第3个字符往右,返回'#'第4次出现的位置。 select instr('1#3#5#7#9#',10) from dual; 从左第3个字符往右,返回'#'第10次出现的位置,没有找到返回0. select instr('1#3#5#7#9#',-1) from dual; 从右第1个字符往左,返回'#'第1次出现的位置。 select instr('1#3#5#7#9#',-1,3) from dual; 从右第1个字符往左,返回'#'第3次出现的位置。 select instr('1#3#5#7#9#',-3,3) from dual; 从右第3个字符往左,返回'#'第3次出现的位置。 SUBSTRSUBSTR函数从给定源字符串中给定的位置开始,提取指定长度的字符串。如果起始位置大于源字符串的长度,就会返回null。如果从给定起始位置提取的字符数大于源字符串的长度,返回的部分是从起始位置到字符串结尾的子字符串。 SUBSTR函数有三个参数,前两个是强制的。语法:SUBSTR(source string,start position,[number of characters to extract])。要提取的默认字符数是从start position到source string结尾的字符数。 select substr('1#3#5#7#9#',5) from dual; 从从左到右数第5个字符处开始提取,从左到右提取,一直到源字符串结尾。 select substr('1#3#5#7#9#',5,3) from dual; 从从左到右数第5个字符处开始提取,从左到右提取,提取3个字符。 select substr('1#3#5#7#9#',2) from dual; 从从右到左数第3个字符处开始提取,从左到右提取,提取2个字符。 select substr('1#3#5#7#9#',-2) from dual; 空 REPLACEREPLACE函数用替换项取代源字符串中出现的所有搜索项。如果替换项的长度与搜索项的长度不同,那么返回字符串的长度与源字符串的长度也不同。如果没有找到搜索字符串,就会原封不动的返回源字符串。 REPLACE函数有三个参数,前两个是强制的。语法:REPLACE(source string,search item[,replacement term])。如果省略replacement term参数,就会从source string中删除所有出现的search item。 select replace('1#3#5#7#9#','->') from dual; select replace('1#3#5#7#9#','#') from dual; TRANSLATE三、数字函数ROUNDROUND函数依据指定的小数精度对数值进行舍入运算。返回依据有效数字以指定的小数精度进行上舍入或者下舍入的值。如果指定的的小数精度为n,则要舍入的有效数据在小数点右边(n+1)个位置。如果n为负数,那么要舍入的有效数字在小数点右边n个位置。如果有效数据的数据大于或者等于5,就进行“上舍入”,其他情况进行“下舍入”。 ROUND函数有两个参数。语法:ROUND(source number,decimal precision)。source number参数表示任何数字值。decimal precision参数指定舍入的精度,它是可选的。如果没有指定decimal precision参数,则舍入的默认精度是0,也就是说将源数字舍入为最接近的整数。 select round(1601.916,1) from dual; select round(1601.916,2) from dual; select round(1601.916,-1) from dual; select round(1601.916,-3) from dual; select round(1601.916) from dual; TRUNCTRUNC函数依据指定的小数精度对数据执行截取运算。数字截取不同于舍入,如果小数精度的正数的话,最后的值依据指定的小数精度删除数字,并不进行向上或者向下舍入。然而,如果指定的小数精度(n)为负数,输入值从小数点左边第n个数位开始向后归0。 TRUNC函数有两个参数。语法:TRUNC(source number,decimal precision)。Source number表示任何数字值。Decimal precision指定截取的精度,它是可选的。如果没有指定decimal precision参数,那么默认精度为0,即将source number截取到最接近的整数。 select trunc(1601.916,1) from dual; select trunc(1601.916,2) from dual; select trunc(1601.916,-1) from dual; select trunc(1601.916,-3) from dual; select trunc(1601.916) from dual; MODMOD函数返回除法运算的余数。提供两个数――被除数和除数,执行除法运算。如果除数是被除数的因数,MOD就返回0,因为没有余数。如果除数等于0,则返回no division by zero错误,MOD函数也返回0。如果除数大于被除数,那么MOD函数返回被除数作为结果。 MOD函数有两个参数。语法:MOD(dividend,divisor)。dividend和divisor参数都可以表示数字字面值、列或者表达式。可以是正数也可以是负数。 select mod(6,2) from dual; select mod(5,3) from dual; select mod(7,35) from dual; select mod(5.2,3) from dual; select mod(-5,3) from dual; MOD函数通常用来区分奇数和偶数。 四、日期函数SYSDATESYSDATE函数没有参数,它返回数据库服务器当前的系统日期和时间。 select sysdate from dual; 日期运算Date1-Date2=Num1 可以从另一个日期中减去日志。这两个日期项之间的差值表示它们之间的天数。可以将所有数字(包括小数)添加到日期项或者从日期项中减去。在该上下文中,数字表示天数。数字和日期项之间的和或者差值总是返回日期项。不允许相加、相乘或者相除两个日期项。 select to_date('31-jan-01')-to_date('01-jan-01') from dual; select sysdate + 1 from dual; MONTHS_BETWEENMONTHS_BETWEEN函数返回表示两个强制的日期参数之间月数的数值。语法:MONTHS_BETWEEN(date1,date2)。计算date1和date2之间朋份的差值(每月31天)。如果date1在date2之前就反加负数。这两个日期参数之间的差值可能由整数和小数部分组成。整数表示这两个日期之间的朋数。小数部分表示计算年和月之间整数差值这后剩余的天数和时间,以31天的月份为基础。如果要比较的日期的日组成部分相同或者是各自月份的最后一天,那么就返回没有小数部分的整数。 select months_between(sysdate,sysdate-31) from dual; select months_between('29-mar-2008','28-feb-2008') from dual; select months_between('29-mar-2008','28-feb-2008')*31 from dual; ADD_MONTHSADD_MONTHS函数返回日期项,这个日期项通过将指定月数添加到给定日期计算得出。 ADD_MONTHS函数有两个强制参数。语法:ADD_MONTHS(start date,number of months)。在将指定的月数添加到start date之后,函数才计算目标日期。月数可能是负数,这样返回的目标日期就早于起始日期。number of months可以是小数,但会忽略小数部分,而使用整数部分。 select add_months('07-APR-2009',1) from dual; select add_months('07-APR-2009',2.5) from dual; select add_months('07-APR-2009',-12) from dual; NEXT_DAYNEXT_DAY函数返回的日期是星期内指定的日子下一次出现时的日期。 NEXT_DAY函数有两个强制参数。语法:NEXT_DAY(start date,day of the week)。函数计算在start date之后day of the week参数下一次出现的日期。day of the week参数可以是字符值或者整数值。可接受的值由NLS_DATE_LANGUATE数据库参数确定,但默认值至少是日子名称的前三个字符或者整数值,其中1表示星期日,2表示星期一,以此类推。在任何情况下都应该指定表示星期几的字符值。简短名称可以大于三个字符,例如星期日可以表示为sun、sund、sunda或者sunday。 select next_day('01-JAN-2009','tue') from dual; select next_day('01-JAN-2009','WEDNE') from dual; select next_day('01-JAN-2009',5) from dual; LAST_DAYLAST_DAY函数返回指定日子所属的月的最后一天的日期。 LAST_DAY函数有一个强制参数。语法:LAST_DAY(start date)。该函数提取start date参数所属的月,并计算该月最后一天的日期。 select LAST_DAY('01-JAN-2009') from dual; 日期ROUND日期ROUND函数依据指定的日期精度格式对值进行舍入运算。返回的值要么向上舍入要么向下舍入为最接近的日期精度格式。 日期ROUND函数使用一个强制参数和一个可选参数。语法:ROUND(source date[,date precision format])。source date参数表示任意日期项。date precision format参数指定舍入的精度,是可选的,如果没有指定,默认的舍入精度是日。date precision formats包括世纪(CC)、年(YYYY)、季度(Q)、月(MM)、星期(W)、日(DD)、时(HH)和分(MI)。 向上传入到世纪相当于给当前世纪加1个世纪。如果日部分大于16,就会向上舍入到下一个月,否则就会向下舍入到当月的开头。如果月在1和6之间,那么舍入到年就会返回当年开头的日期,否则返回下一年开头的日期。 select round(sysdate) day,round(sysdate,'w') week,'month') month,'year') year from dual; select round(sysdate,'cc') cc,'q') q,'hh'),'mi') min hour from dual; 日期TRUNC日期TRUNC函数依据指定的日期精度格式对值进行截取运算。 日期TRUNC函数使用一个强制参数和一个可选参数。语法:TRUNC(source date[,date precision format])。source date参数表示任意日期项。date precision format参数指定截取的精度,它是可选的,如果没有指定,默认的截取精度是日。即source date的所有时间部分都设置为午夜(00:00:00)。月级别上的截取将source date的日期设置为该月的第一天。年级别上的截取返回当年开头的日期。 select trunc(sysdate) day,trunc(sysdate,'year') year from dual; 五、隐式数据类型转换如果可能,可以将数据类型与函数所需参数的数据类型不相符的值隐式转换为所需的格式。VARCHAR2和CHAR数据类型统称为字符类型。字符字段非常灵活,几乎允许存储所有类型的信息。因此,可以方便地将DATE和NUMBER值转换为它们的字符形式。这些转换称为数字到字符(number to character)和日期到字符(date to character)转换。 select length(1234567890) from dual; select length(0123456789) from dual; select length(sysdate) from dual;. 将字符数据隐式转换为数字数据类型的情况并不常见,因为出现这种情况的唯一条件是该字符数据表示有效数字。 当字符串符合下面的日期格式时,可以实现隐式字符到日期(character to date)的转换:[D|DD] separator1 [MON|MONTH] separator2 [R|RR|YY|YYYY]。D和DD分别表示月份中1位和2位的日子。MON是月的三字符缩写词,而MONTH是月的全名。R和RR分别表示满意位和2位数字的年。YY和YYYY分别表示2位和4位数字的年。separator1和separator2元素可以是大多数标点符号、空格和制表符。 '24-JAN-09' DD-MON-RR '1january/8' DMONTH/R '13*jan*8' DD*MON*R '13/feb/2008' DD/MON/YYYY '01$jan/08' DD$MON/RR '24-JAN-09 18:45' DD-MON-RR HH24:MI 六、转换函数TO_CHAR函数将数据转换为字符TO_CHAR函数返回VARCHAR2数据类型的值。当将它应用于NUMBER数据类型的值时TO_CHAR(num1[,format mask[,nls_parameters]]) num参数是强制性的,它必须是一个数字值。可选的format参数用来指定数字格式信息――例如宽度、货币符号、小数点的位置和组(或者千位)分隔符,必须将它们包含在单引号内。除此之外,对于要转换为字符的数字而言,还有其他一些格式信息的选项。 select to_char(00001) from dual; select to_char(00001,'099999') from dual; TO_CHAR函数将数据转换为字符 |