Oracle Database 11g SQL 开发指南学习笔记:简单函数

1、字符函数


select ascii('a'),   --把字符转化为ascii码
       ascii('z'),
       ascii('A'),
       ascii('Z'),
       
       chr(97),      --把ascii码转化为字符
       chr(122),
       chr(65),
       chr(90)      
from dual;


select concat('abc','123'),    --连接字符串
       'abc' || '123',         --与concat函数一样
       
       --把字符串中的每个单词的首字母转化为大写
       initcap('Adescription of modern science'),
       
       --在字符串中,查找某个单词,从1开始,查找这个单词的第一次出现,默认都为1
       instr('A description of modern science','modern',1,1),
       instr('A description of modern science','modern'),
       
       --字符的个数,不是字节数
       length('A description of modern science'),
       
       lower('ALM'),   --把字符串全部转化为小写
       
       upper('aRx')    --把字符串全部转化为大写          
from dual;


select --默认情况下,在字符串的左边会填充空格,总长度为21
       lpad('modern science',21),
       
       --这个例子,在左边补齐字符串时,是从左向右边填充的:@#$,再@#$,再@#$,
       --但由于第三次太南充时超过了21个字符,所以只填充了@符号
       lpad('modern science',21,'@#$'),
       
       --默认情况下,在字符串的右边会填充空格,总长度为21
       rpad('modern science',21),
       
       --这个例子,在右边补齐字符串时,也是从左向右填充时:@#$,再@#$,再@#$,但由于第三次太南充时超过了21个字符,所以只填充了@符号
       rpad('modern science',21,'@#$')
from dual;


select --默认是截去空格
       ltrim(' good bye!'),
       
       --指定要截去*+,但下面字符串只是*+*,而不是*+*+,但最后都会把*+*都去掉
       -- good bye!
       ltrim('*+* good bye!','*+'),
       
       --这个说明只要是*+,任何一个字符要出现在左边,都会被去掉,直到出现了@符号
       -- good bye!
       ltrim('*+++* good bye!','*+'),
       
       --@*good bye!
       ltrim('*+++*@*good bye!','*+')       
from dual;


--截去右边的字符串,直到遇到非截取字符串为止
select rtrim('good bye!  '),           --默认去掉空格
       rtrim('good bye!*+*+*','*+'),   --good bye!
       rtrim('good bye!*+*+ *','*+')   --good bye!*+*+
from dual;


select --去掉左边和右边的*,这里的trim_string参数,不能超过1个字符
       trim('*' from '*+*good bye!*+**'),
       
       trim('  good bye !  ')    --默认去掉左右的空格
from dual;


select nvl(col,'Unknown'),
       
       nvl2(col,col,'Unknown')  --如果col列的值为非空,那么还是col的值,如果为空,则为Unknown
from
(
  select 'abc' as col from dual
  union all
  select '123' from dual
  union all
  select null from dual
);


select --把science替换成physics
       replace('A description of modern science','science','physics'),
       
       --从字符串中取子串,指定从哪个位置开始,所取长度
       substr('A description of modern science',3,length('description'))
from dual;


--soundex函数用于获取某个单词的发音的字符串
select v,
       soundex(v)   --W300
from
(
  select 'white' as v from dual
  union all
  select 'sweet' from dual
)
where soundex(v) = soundex('whyte');  
 

另外,计算字符串所占用的字节数,而非字符数:

点击(此处)折叠或打开

  1. select length('今天天气很热') v1,
  2.        lengthb('今天天气很热') v2
  3. from dual
  4. /*
  5. 6    18
  6. */


2、数字函数


select --绝对值
       abs(-10.2),
       abs(100.3),
       
       sign(-3),  --如果x为负数,那么返回-1 
       sign(10),  --如果x为正数,那么返回1
       sign(0),   --如果x为0,那么返回0
       
       mod(10,3),  --取余数
       
       --大于x的最小整数
       ceil(5.8),    -- 6
       ceil(-5.8),   -- -5
       
       --小于x的最大整数
       floor(5.8),    -- 5
       floor(-5.8)    -- -6
from dual;


select exp(2),     --e的x次幂
       
       power(10,2),  --10的2次方
       
       sqrt(4),      --4的平方根
       
       log(2,4),     --以2为底4的对数,就是4开2次方,就是2
       ln(10)        --以e为底10的对数,就是10开e次方
from dual;


--位与,输入的参数必须是10进制数,但这个函数又是对数字进行位与
select bitand(
               bin_to_num(1,0,1),  --2进制数101转换为10进制5
               bin_to_num(0,1,0)   --2进制数10,也就是10进制数2
             )
from dual;


--注意:5.58有左边的第0位,第1位,也有右边的第0位,第1位
select round(5.58,0),    -- 6   四舍五入,保留0位小数
       round(5.58,1),    -- 5.6 保留1位小数
       round(5.58,-1),   -- 10  保留1位整数,也就是去掉第0位的整数
       round(5.58,-0),   -- 6   保留0位整数,也就是去掉小数部分
       
       round(4.58,-1),   -- 0

       
       --截断数字
       trunc(5.58),    -- 5
       trunc(5.58,1),  -- 5.5
       trunc(5.58,-1), -- 0
       trunc(4.48,-1)  -- 0
from dual;



<p style="margin-top:4px;margin-bottom:4px;padding-top:2px;padding-bottom:2px;font-family:Arial, Helvetica, sans-serif;line-height:normal;white-space:normal;backgrounx$color%????BFFFFFE??????????N??$093?MCF?c?I??@AD???%?7E5?%^}'E6%?W ???1D%0q?X??;?$3E <p stI??????12maB ?top:4px;margin-bottom:4px????Ging?2?@????l??2 ging-bottom????$3Bfont-?? '???2AArial, Helvet?xx, ?0Qs-ser`???te-h???):??w?l;wh9-?Z???-??!???`l??l ?bkground-color:e?/O?FFFF;" %?f="" %?]?g?!u="" ???="" %cr???p?8n?aippet_id=%2? m"9"????jt_filexname=????K???U?405L?%??6?\?-" namet??W???t" class="3?E??$style%@P6f?? ?????A???鬳???Bmargin-??Va|Y?M?\?Dd??1Zj* ?WV7Anor?/??Q??}>??a;?Bq"?llor%3?????M*?Μ4Ese?y?p>B?dii????( ?045),?(???-??~A%??xt6%???w?$E5??1??55转为%E?9??86asci ???:?7符V;C??^?7(?FK[WK??>??m0A %????

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/653220/viewspace-1982353/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/653220/viewspace-1982353/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值