一、大小写转换函数

LOWER

LOWER函数用小写形式替换字符串中的大写字符。语法:LOWER(s).

select lower(100+100),lower('SQL'),lower(sysdate) from dual;

UPPER

UPPER函数用大写形式替换字符串中的小写字符。语法:UPPER(s).

select upper('sql') from dual;

INITCAP

INITCAP函数将字符串转换为首字母大写的形式。字符串中每个单词的第一个字母都被转换为大写形式,面每个单词余下的字母被转换为小写字母形式。单词之间用空格或者下划线分开,但有些字符(如百分比符号(%)、感叹号(!)或者美元符号($))也都是有效的单词分隔符。标点符号和特殊字符也是有效的单词分隔符。语法:INITCAP(s)

select initcap('init cap or init_cat or init%cap') from dual;

二、字符操作函数

CONCAT

CONCAT函数连接两个字符字面值、列或者表达式从而生成一个更大的字字符表达式。语法:CONCAT(s1,s2)

select concat('Today is:',SYSDATE) FROM DUAL;

CONCAT只能使用两个参数

select concat('Outer1 ',concat('Inner1',' Inner2')) from dual;

LENGTH

LENGTH函数返回组成字符串的字符数。空格、制表符和特殊字符都被LENGTH函数计算在内。只有一个参数,LENGTH(s)。(制表符算1)

select length('ab cd e') from dual;

LPAD和RPAD

LPAD(RPAD)函数返回给定字符串左(右)边填充指定数量的字符后形成的合成字符串。用于填充的字符串包括字符字面值、列值、表达式、空格(默认)、制表符和特殊字符。

LPAD和RPAD函数有三个参数,语法:RPAD(s,n,p)和LPAD(s,n,p)。s表示源字符串,n表示返回字符串的最终长度,p指定用于填充的字符串。

select LPAD('abc',6,'*'),RPAD('abc',6,'*') from dual;

TRIM

TRIM函数从字符值的开头或结尾删除一些字符,从面生成一个更简短的字符项。

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函数从字符值的结尾删除一些字符,从而生成一个更简短的字符串。语法:RTRIM(string[,trimstring]),被修整的string是必须的,可以删除多个字符。默认删除空格。select rtrim('abcd  ') from dual;select rtrim('abcd***','*') from dual;select rtrim('abcd*#','*#') from dual;

LTRIM

LTRIM函数从字符值的开头删除一些字符,从而生成一个更简短的字符串。语法:RTRIM(string[,trimstring]),被修整的string是必须的,可以删除多个字符。默认删除空格。select ltrim('  abcd') from dual;select ltrim('***abcd','*') from dual;select ltrim('*#abcd','*#') from dual;

INSTR

INSTR函数确定搜索字符串在给定字符串内的位置。它返回数字位置,在这个位置上,搜索字符串开始第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#','#',3,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次出现的位置。

SUBSTR

SUBSTR函数从给定源字符串中给定的位置开始,提取指定长度的字符串。如果起始位置大于源字符串的长度,就会返回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#',-3,2) from dual;

从从右到左数第3个字符处开始提取,从左到右提取,提取2个字符。

select substr('1#3#5#7#9#',-3,-2) from dual;

REPLACE

REPLACE函数用替换项取代源字符串中出现的所有搜索项。如果替换项的长度与搜索项的长度不同,那么返回字符串的长度与源字符串的长度也不同。如果没有找到搜索字符串,就会原封不动的返回源字符串。

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

三、数字函数

ROUND

ROUND函数依据指定的小数精度对数值进行舍入运算。返回依据有效数字以指定的小数精度进行上舍入或者下舍入的值。如果指定的的小数精度为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;

TRUNC

TRUNC函数依据指定的小数精度对数据执行截取运算。数字截取不同于舍入,如果小数精度的正数的话,最后的值依据指定的小数精度删除数字,并不进行向上或者向下舍入。然而,如果指定的小数精度(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;

MOD

MOD函数返回除法运算的余数。提供两个数——被除数和除数,执行除法运算。如果除数是被除数的因数,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函数通常用来区分奇数和偶数。

四、日期函数

SYSDATE

SYSDATE函数没有参数,它返回数据库服务器当前的系统日期和时间。

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_BETWEEN

MONTHS_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_MONTHS

ADD_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_DAY

NEXT_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_DAY

LAST_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,round(sysdate,'month') month,round(sysdate,'year') year from dual;

select round(sysdate,'cc') cc,round(sysdate,'q') q,round(sysdate,'hh'),round(sysdate,'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,'w') week,trunc(sysdate,'month') month,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

'1\\january/8'      D\\MONTH/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函数将数据转换为字符格式元素元素说明格式数字字符结果

9数字宽度99991212

0显示前面的009999001200012

.小数点的位置09999.999030.4000030.400

D小数分隔符的位置(默认为名点)09999D999030.4000030.400

,逗号的位置09999,9990304000003,040

G组分隔符的位置(默认为逗号)09999G9990304000003,040

$美元$09999903040$003040

L当地货币L09999903040GBP003040(如果nls_currency设置为GBP)

MI表示负数的减号的位置99999MI-30403040-

PR包围在括号内的负数99999PR-3040<3040>

EEEE科学计数法99.99999EEEE121.9761.21976E+02

UNls_dual_currencyU09999903040CAD003040(如果nls_dual_currency设置为CAD)

V乘以10n次(n是V之后9的数量)9999V993040304000

S前面加上+或者-S9999993040+3040

TO_CHAR函数将日期转换为字符

使用TO_CHAR函数,可以利用各种格式模型将DATE项转换为几乎所有日期的字符表示形式。

语法:TO_CHAR(date1[,format[,nls_parameter]])

只有date1参数是强制的,date1必须是可以被隐式转换为日期的值。可选的format参数区分大小写,必须奖它包含在单引号内。格式掩码指定哪些日期元素,是用长的名称还是用缩写名称来描述这个元素。还会自动给日和月的名称填充空格。可以使用格式掩码的修饰符来删除这些空格,这个修饰符称为填充模式(fm)运算符。在格式模型之前添加字母fm,就会命令Oracle从日和月的名称中删除所有空格。对于被转换为字符串的日期而言还有许多格式选项。

select to_char(sysdate) || ' is today''s date' from dual;

select to_char(sysdate,'Month') || 'is special time ' from dual;

select to_char(sysdate,'fmMonth') || 'is special time ' from dual;

to_char把日期转换为字符串

假设格式元素作用于日期02-JUN-1975格式元素说明结果

Y年的最后一位5

YY年的最后两位75

YYY年的最后三位975

YYYY4位数字表示的年1975

RR两们数字表示的年(已知世纪)75

YEAR,year,Year区分大小写并用英语拼写的年NINETEEN SEVENTY FIVE,

Nineteen seventy five,

Nineteen Seventy Five

MM两位数表示的月06

MON,mon,Mon月的三个字母缩写JUN,jun,Jun

MONTH,month,Month区分大小写并用英语拼写的月JUNE,june,June

D星期的第几天2

DD月的两位数日02

DDD年的日153

DY,dy,Dy星期的三个字母缩写MON,mon,Mon

DAY,day,Day区分大小写并用英语拼写的星期MONDAY,Monday,Monday

提取日期时间数据类型的时间部分,表中使用的日期为27-JUN-2010 21:35:13格式元素说明结果

AM,PM,A.M.和P.M.子午线指示器PM

HH、HH2和HH24一天的小时,1-12时和0-23时09,09,21

MI分(0~59)35

SS秒(0~59)13

SSSSS午夜之后的秒(0~86399)77713

其他一些能够在日期时间格式模型中使用的元素。标点符号用来分隔格式元素。有三种类型的后缀可以格式化日期时间元素的组件。而且,如果将字符字面值包含在双引号内,那么就能够在返回值中包含它们。使用日期12/SEP/08 14:31格式元素说明和格式掩码结果

/ . , ? # ! -标点符号:’MM.YY’09.08

“any character literal”字符字面值:’”Week” W “of” Month’Week 2 of September

TH位置或者序数文本:’DDth ”of” Month’12TH of September

SP拼写出数字:’MmSP month Yyyysp’Nine September Two Thousand Eight

THSP or SPTH拼写出位置或者序数:’hh24SpTh’Fourteenth

使用TO_DATE函数将字符转换为日期

TO_DATE函数返回DATE类型的值。转换为日期的字符串可能包含所有或者部分组成DATE的日期时间元素。当只转换包含日期时间元素子集的字符串时,Oracle提供资金默认值来构造完整的日期。字符串的组成部分通过格式模型或掩码与不同的日期时间元素相关联。

语法:TO_DATE(string1[,format,[nls_parameter]])

只有string1参数是强制性的,如果没有提供格式掩码,string1会隐式转换为日期。几乎总是使用可选的fromat参数,在单引号内指定它,与TO_CHAR的格式掩码相同。TO_DATE函数有fx修饰,表示string1和格式掩码必须完全匹配,否则报错。

select to_date('25-DEC-2010') from dual;

select to_date('25-DEC') from dual; --错误

select to_date('25-DEC','DD-MON') from dual;

select to_date('25-DEC-2010 18:03:45','DD-MON-YYYY HH24:MI:SS') from dual;

select to_date('25-DEC-10','fxDD-MON-YYYY') from dual;--错误

TO_NUMBER函数将字符转换为数字

TO_NUMBER函数返回NUMBER类型的值。转换为数字的字符串必须有合适的格式,以便用相应的格式掩码转换或删除所有非数字组成部分。

语法:TO_NUMBER(string1[,format,[nls_parameter]])

只有string1参数是强制性的,如果没有提供格式掩码,string1就必须是可以隐式转换为数字的值。用单引号指定可选的format参数。与TO_CHAR转换数字到字符串中的格式掩码相同。

select to_number('$1,000.55') from dual;--错误

select to_number('$01,000.55','$0999,999.999') from dual;

注:TO_NUMBER函数将字符项转换为数字。如果使用较短的格式掩码转换数字,就会返回错误,如果使用较长的格式掩码转换数字,就会返回原数字。

七、条件函数

NVL

NVL函数评估任何数据类型的列或者表达式是不是空值。如果原始项是空值,返回备选的非空值;否则,返回原始项。

NVL函数有两个强制参数。语法:NVL(original,ifnull)。其中original表示要测试的项,如果original项计算为空,就返回ifnull。original和ifnull参数的数据类型必须一致。它们必须是相同的类型,或者可能将ifnull隐式转换为original参数的类型。NVL函数返回值的数据类型与original参数的数据类型相同。

select nvl(1234) from dual;--错误

select nvl(null,1234) from dual; ---1234

select nvl(substr('abc',4),'No substring exists') from dual;

NVL2

NVL2函数是对NVL函数的增强,但功能非常类似。NVL2函数评估任何数据类型的列或者表达式是不是空值。如果第一项不是空值,那么返回第二个参数,否则返回第三个参数。

NVL2函数有三个强制参数。语法:NVL2(original,ifnotnull,ifnull),其中original表示被测试的项。如果original不是空值,就返回ifnotnull;如果original是空值,就返回ifnull。ifnotnull和ifnull参数的数据类型必须一致或者ifnull参数可以转换为ifnotnull参数的数据类型,它们不能是LONG数据类型。它们可以是相同的类型,或者可以将ifnull转换为ifnotnull参数的类型。NVL2函数返回的数据类型与ifnotnull参数的数据类型相同。

select nvl2(1234,1,'a string') from dual; --错误

select nvl2(null,1234,5678) from dual;  --5678

select nvl2(substr('abc',2),'Not bc','No substring') from dual;

NULLIF

NULLIF函数测试两项的相等性。如果它们相等,函数就返回空值,否则返回这两个测试项的第一项。

NULLIF函数有两个可以是任何数据类型的强制参数,两个参数类型必须一致,第一个参数不可以为空。语法:NULLIF(ifunequal,comparison_term),其中比较参数ifunequal和comparison_term。如果它们相同,返回NULL。如果它们不同,返回ifunequal参数。

select nullif(1234,1234) from dual;

select nullif('24-JUL-2009','24-JUL-09') from dual;

select nullif(1,null) from dual;  --1

select nullif(null,null) from dual;----返回ORA-00932: inconsistent datatypes: expected - got CHAR

COALESCE

COALESCE函数从参数列表中返回第一个非空值。如果所有参数为空,那么返回空值。

COALESCE函数有两个强制参数和任何数量的可选参数。语法:COALESCE(expr1,expr2,...,exprn),如果expr1不是空值,就返回它,否则,如果expr2不是空值,就返回它,以此类推。COALESCE函数是NVL函数的一般形式:

COALESCE(expr1,expr2)=NVL(expr1,expr2)

COALESCE(expr1,expr2)=NVL(expr1,NVL(expr2,expr3))

如果找到非空值,COALESCE返回的数据类型与第一个非空参数的数据类型相同。为了避免出现“ORA-00931:inconsistent date types”错误,所有非空参数的数据类型必须与第一个非空参数的数据类型一致。

select coalesce(null,null,null,'a string') from dual;

select coalesce(null,null,null) from dual;

select coalesce(substr('abc',4),'not bc','no substring') from dual;

select coalesce(substr('abc',4),'not bc',123) from dual;--错误

DECODE

DECODE函数通过测试前两项的相等性来实现if-then-else条件逻辑,如果它们相等,则返回第三个参数,如果它们不相等,可能返回另一项。

DECODE函数至少使用三个强制参数,但可以使用更多参数。语法:DECODE(expr1,comp1,iftrue1[,comp2,iftrue2...[,compN,iftrueN]][,iffalse])。这些参数的计算如下面的伪代码示例:

if expr1 = comp1 then return iftrue1

else if expr1 = comp2 then return iftrue 2

...

...

else if expr1 = compN then return iftrueN

else return null | iffalse;

DECODE函数的所有参数都可以是表达式。返回的数据类型与第一个匹配比较选项的数据类型相同的。表达式expr1被隐式转换为第一个比较参数comp1的数据类型。计算其他比较参数comp2...compn时,也会将它们隐式转换为comp1相同的数据类型。DECODE认为两个空值相等,因此如果expr1是空值,并且comp3是出现的第一个空值比较参数,那么就会返回对应的结果参数iftrue3。

select decode(1234,123,'123 is a match') from dual;

select decode(1234,123,'123 is a match','No match') from dual;

select decode('search','comp1','true1','comp2','true2','search','true3',substr('2search',2,6),'true4','false') from dual;

select decode(null,'comp1','true1','comp2','true2',null,'true3','false') from dual;

select decode(1234,123,123,'No match') from dual; --‘No match'ORA-01722: invalid number

CASE表达式

CASE表达式在所有第三和第四代编程语言都可以实现。和DECODE函数一样,CASE表达式使用if-then-else条件逻辑。CASE表达式有两个变体。简单的CASE表达式列出条件搜索项一次,由每个比较表达式来测试与搜索项的相等性。搜索的CASE表达式列出每个比较表达式的单独条件。

CASE表达式至少使用三个强制参数,但可以使用更多参数。其语法取决于是使用简单CASE表达式还是使用搜索的CASE表达式。

简单CASE表达式的语法:

CASE search_expr

WHEN comparison_expr1 THEN iftrue1

[WHEN comparison_expr2 THEN iftrue2

...

WHEN comparison_exprN THEN iftureN]

[ELSE iffalse]

END

简单CASE表达式包含在CASE...END代码块内,由至少一个WHEN...THEN语句组成。在最简单的情况下——只有一个WHEN...THEN语句,search_expr与comparison_expr1进行比较。如果它们相等,姥返回结果iftrue1。如果不相等,那么返回一个空值,除非定义了ELSE组件,这个情况返回默认的iffalse值。当CASE表达式中有多个WHEN...THEN语句时,就会不断搜索匹配的比较表达式,直到找到匹配项为止。

搜索、比较和结果参数可以是列值、表达式或都字面值,但必须都是相同数据类型。

select

case substr(1234,1,3)

when '134' then '1234 is a match'

when '1235' then '1235 is a match'

when concat('1','23') then concat('1','23')|| ' is a match'

else 'no match'

end

from dual;

搜索的CASE表达式的语法:

CASE

WHEN condition1 THEN iftrue1

[WHEN condition2 THEN iftrue2

...

WHEN conditionN THEN iftrueN]

[ELSE iffalse]

END

搜索的CASE表达式包含在CASE...END代码块内,由至少一个WHEN...THEN语句组成。在最简单的情况下——只有一个WHEN...THEN语句,计算condition1;如果它是true,那么返回结果iftrue1。如果不是,那么就返回一个空值,除非定义了ELSE组件,这种情况下,返回默认的iffalse值。当CASE表达式中有多个WHEN...THEN语句时,就会不断搜索匹配的比较表达式,直到找到匹配项为止。

select

case

when length(substr(1234,1,3)) = 1 then 'length of substring is 1'

when length(substr(1234,1,3)) = 2 then 'length of substring is 2'

when length(substr(1234,1,3)) = 3 then 'length of substring is 3'

else 'no match'

end

from dual;

参考:《OCP_OCA认证考试指南全册__ORACLE_DATABASE_11G》

oracle co函数,Oracle 常用函数相关推荐

  1. oracle sql常用的函数,界别Oracle和SQL Server常用函数

    区分Oracle和SQL Server常用函数 一.数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) ...

  2. oracle中110个常用函数

    主要介绍了oracle中110个常用函数,方便大家编写出更强大的sql语句,需要的朋友可以参考下. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,a ...

  3. PHP 常用函数 - 其他常用函数

    PHP 常用函数 PHP 常用函数 - 字符串函数 PHP 常用函数 - 数组函数 PHP 常用函数 - 数学函数 PHP 常用函数 - 目录.文件函数 PHP 常用函数 - 其他常用函数 文章目录 ...

  4. oracle有iif函数,access常用函数

    Oracle与Access在开发中的一些不同之处 1.      函数名称的不同 功能 Oracle Access 字符函数: 返回字符的ASCII码 ASCII(x) ASC(x) 返回ASCII为 ...

  5. MYSQL天花板函数和地板函数_2020-08-04常用函数

    •单行函数语法 –语法: 函数名[(参数1,参数2,-)] –其中的参数可以是以下之一: •变量 •列名 •表达式 •单行函数特征 –单行函数对单行操作 –每行返回一个结果 –有可能返回值与原参数数据 ...

  6. Hive内置函数与常用函数汇总

    目录 Hive内置函数汇总 字符函数(字符串操作) 数学函数 集合函数 类型转换函数 日期函数 条件函数 聚合函数 表生成函数 辅助功能类函数 数据屏蔽函数(从Hive 2.1.0开始) Hive常用 ...

  7. java trunc函数_Oracle常用函数Trunc及Trunc函数用法讲解

    1. Trunc( date) trunc 以指定的元素截取日期类型的数据 语法:trunc(date,[ format]) date– 日期格式的值 format–日期格式 如'mm','yyyy' ...

  8. hive中字段长度函数_Hive常用函数总结

    hive函数的分类 hive的客户端 显示当前会话有多少函数可用 SHOW FUNCTIONS; 如: hive> show functions ; OK ! != % 显示函数的描述信息 DE ...

  9. matlab doc函数,matlab常用函数.doc

    matlab常用函数.doc MatLab 常用函数 1. 特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 name ...

  10. python常用函数-python常用函数精讲

    原标题:python常用函数精讲 返回值为bool类型的函数 bool是Boolean的缩写,只有真(True)和假(False)两种取值 bool函数只有一个参数,并根据这个参数的值返回真或者假. ...

最新文章

  1. mongodb基本操作=增删改查
  2. python中md5_Python的md5是什么意思
  3. oracle 备份 无客户端,已解决: 备份linux oracle 突然不能备份了 - Dell Community
  4. 12v电流表的正确接法_难点分析 | 电表的内外接法
  5. c++五子棋_Java五子棋实现
  6. 常用Maven插件介绍(下)(转)
  7. 德国数字化进展迅速,远程发送诉讼仅需6小时
  8. Android百度SDK定位
  9. 开启admin$共享
  10. Vue实例-本地留言板
  11. 2019年下半年教师资格幼儿园《综合素质》真题与参考答案
  12. Java实现指数运算
  13. Python实现日周月排行榜
  14. 进制转换器java程序_Java实现复杂的进制转换器功能示例
  15. “揭开意识的奥秘:认知相对论”及作者李玉鑑简介 (公号发“李玉鑑AI”下载PDF资料,欢迎转发、赞赏支持科普)
  16. Windows10迈克菲McAfee添加文件白名单,排除隔离文件
  17. linux下使用vlc命令行推流
  18. python安装包下载太慢解决
  19. PostgreSQL-Arcgis地理数据库中的系统表
  20. HTTP请求头X-Forwarded-For,Remote_Addr

热门文章

  1. Myeclipse10安装以及破解方法
  2. SQL Server 2012学习笔记 (三) ----- SQL Server SQL语句
  3. sc不是内部命令或外部命令
  4. 华为存储学习笔记-8
  5. 太阳能光伏板发电原理、分类、组成
  6. 使用Windows命令行去截图
  7. hive可视化图形页面(hwi)
  8. 比较excel两列数据是否有重复
  9. java游戏时间条_java – 如何获得游戏的实时时间
  10. 2017 12 05