oracle一些常用的单记录函数
总结一些Oracle中常用的单记录函数。
1.0 NVL()
作用:从两个表达式返回一个非NULL值
用法:NVL(表达式1, 表达式2)
如果表达式1的结果不为NULL,返回表达式1的结果;如果表达式1的结果为NULL,返回表达式2的结果。
引申:表达式1的结果为NULL,返回表达式2的结果,而表达式2的结果为NULL,则最终返回NULL,可以得出一个伪结论是“如果表达式1和表达式2的结果都为NULL,则返回NULL”。
NVL(123, 456) // 结果是123
1.1 NVL2()
作用:从三个表达式中返回一个
用法:NVL(表达式1, 表达式2, 表达式3)
如果表达式1的结果是NULL,返回表达式3的结果;如果表达式1的结果不为NULL,返回表达式2的结果。
NVL2(NULL, 123, 456) // 结果是456 NVL2(123, 456, 789) // 结果是456
2.0 LOWER()
作用:将字符串中的大写字母转为小写
用法:LOWER(字符串)
3.0 UPPER()
作用:将字符串中的小写字母转为大写
用法:UPPER(字符串)
4.0 SYS_GUID()
作用:以16位RAW类型值形式返回一个全局唯一的标识符
用法:SYS_GUID()
常用作生成id。
SELECT SYS_GUID() ID FROM dual // 直接使用,结果是乱码 SELECT RAWTOHEX(SYS_GUID()) ID FROM dual // 结果是数字和大写字母组合的字符串 SELECT LOWER(SYS_GUID()) ID FROM dual // 转成小写
5.0 LENGTH()
作用:按字符取字符串长度
用法:LENGTH(字符串)
1个中文、英文字母、数字、中文符号、英文符号、全角符号、空格都算1个字符。
LENGTH('你好吗') // 结果是3
5.1 LENGTHB()
作用:按字节取字符串长度
用法:LENGTH(字符串)
1个中文、全角符号是2个字节;1个英文字母、数字、英文符号、空格是1个字节。
LENGTHB('你好吗') // 结果是6
ORACLE中函数后带"B"的都是以字节为单位的。
6.0 TRIM()
作用:删除两边空格或指定字符
用法:TRIM(删除方向 要删除的指定字符 FROM 源字符串)
删除方向和要删除的指定字符为可选参数,当要使用它们时,FROM关键字必须。
删除方向有三种:leading(从字符串的头开始删除)、trailing(从字符串的尾部开始删除)、both(从字符串两边删除)。不指定删除方向,则默认是both。
要删除的指定字符只能是一个字符,不能是字符串。不指定要删除的指定字符,则默认是空格。
TRIM()只能删除半角空格。
TRIM(BOTH '1' FROM '12121') // 结果是212
6.1 LTRIM()
作用: 删除左边空格或指定字符串中的所有字符
用法:LTRIM(源字符串, 要删除的指定字符串)
要删除的指定字符串为可选参数,不指定默认是空格。
TRIM('21233213', '12') // 结果是33213。删掉了左边所有的1和2
6.2 RTRIM()
作用:删除右边空格或指定字符串中的所有字符
用法:RTRIM(源字符串, 要删除的指定字符串)
要删除的指定字符串为可选参数,不指定默认是空格。
TRIM('2332131', '13') // 结果是2332。删掉了右边所有的1和3
7.0 REPLACE()
作用:替换字符串中的指定字符串(全部替换)
用法:REPLACE(源字符串, 目标字符串, 替换的字符串)
替换的字符串为可选参数,不指定默认是去除。
REPLACE('12121', '1') // 结果是22,1全部被替换了
8.0 LPAD()
作用:按字节从左边对字符串使用指定的字符进行填充
用法:LPAD(源字符串, 填充后的字符串长度, 填充的字符串)
填充的字符串为可选参数,不指定默认为空格。
如果填充后的字符串长度比源字符串长度要短,函数会将源字符串从左到右截取成符合填充后的字符串长度的字符串。
LPAD('APPLES', 5) // 结果是APPLE
如果填充的字符串长度 > 待补长度,填充的字符串也会被截取后再进行填充,相反则会不断重复填充至待补长度为0。
LPAD('APPLES', 10, '123') // 结果是1231APPLES
9.0 RPAD()
作用:按字节从右边对字符串使用指定的字符进行填充
用法:RPAD(源字符串, 填充后的字符串长度, 填充的字符串)
填充的字符串为可选参数,不指定默认为空格。
如果填充后的字符串长度比源字符串长度要短,函数会将源字符串从左到右截取成符合填充后的字符串长度的字符串。
RPAD('APPLES', 5) // 结果是APPLE
如果填充的字符串长度 > 待补长度,填充的字符串也会被截取后再进行填充,相反则会不断重复填充至待补长度为0。
RPAD('APPLES', 10, '123') // 结果是APPLES1231
10.0 SUBSTR()
作用:截取指定长度的字符串
用法:SUBSTR(源字符串, 截取开始位置, 截取长度)
截取长度为可选参数。截取开始位置为正数时,不指定默认截取到末尾。
当截取开始位置是0或1的时候,都是从第一位开始截取(区别于下标,位置从1开始计算)。
当截取开始位置为负数时,反向截取。从最后一位开始截取相应的|截取开始位置|长度的字符串,当且仅当 |截取开始位置| > 截取长度 时截取长度才会生效。
SUBSTR('ABCDEFGH', -5, 6) // 结果是EFGHI,相当于SUBSTR('ABCDEFGH', -5, 5)
SUBSTR('ABCDEFGH', -5, 2) // 结果是GH
11.0 INSTR()
作用:在字符串中检索指定字符串,返回检索匹配起始位置
用法:INSTR(源字符串, 目标字符串, 检索起始位置, 匹配第几次出现)
检索起始位置和匹配第几次出现为可选参数。不指定默认都是1。
检索起始位置为负数时,反向检索,但是返回的匹配位置仍然是正向顺序。
INSTR('ABCDEFGH', 'EF', -2) // 结果是5
匹配第几次出现指目标字符串在字符串中第几次出现。
INSTR('ABEFCDEFGH', 'EF', 2, 2) // 结果是7,检索第二次出现的EF
检索不到,返回0,因此可以用 > 0 来表示匹配成功。作用和 LIKE '%字符串%' 相当。
"我本来是个很黯淡的人,是你给了我漫天星光。"