step2:插入测试数据,并提交: 5QL>insert into to values('abcdef','abcdef') 1 row created. SOL>insert into te3 values('hello','roger'): 1 row created. SQL>conmit; Comit complt step3:查询表中的数据 SQL>seloct from te3j s1 地8 Null?Type SQL>select length(s1),length(s2)from t3 LENGTH(S1)LENGTH(S2) 原因:1)可参照第2页中对于varchar2和char的介绍; 2)由于varchar2是可变长字符类型,所以即使字段定义了20位,如果存放的数据达不到20位时, 按实际长度进行存储: 但是 ,char是定长字符类型,如果字段定义成20位,即使存放的数据达不到20位时,也会在 原有的字符串右边补上半角空格,以总长20位的长度进行存储 结论:1)在存储上,一般varchar2类型的数据所占空间比char类型的少: 2)在查询效率上,char类型的比varchar2类型的快;(了解) l.5 instr(s,sl,[m],[n]):表示子字符串s1在字符串s中,从第m位开始检索,第n次出现的时候,所 在的位置是哪 注意:如果m是负整数,表示从右第m开始向左检素: 如果皿,n都省略,表示从左边第1位开始向右检索,在s中第1次出现s1的位置在哪: 例:字符串‘13802142274',子字符串2' SQL>select instr('13802142274',2')from dual 5R138e2142274,2】 SQL>select instr('13802142274','2',1,1)from dual ITR(1382142274,2'1,1) SOL>select instr('13802142274','2',4,2)from dual; sTR(138e2142274,2,4,2) 8 SQL>select instr('13802142274',9,1)from duali I5TR('138e2142274,'2',9,1)
step 2:插入测试数据,并提交; step 3:查询表中的数据; step 4:区别一下; 原因:1)可参照第 2 页中对于 varchar2 和 char 的介绍; 2)由于 varchar2 是可变长字符类型,所以即使字段定义了 20 位,如果存放的数据达不到 20 位时, 按实际长度进行存储; 但是,char 是定长字符类型,如果字段定义成 20 位,即使存放的数据达不到 20 位时,也会在 原有的字符串右边补上半角空格,以总长 20 位的长度进行存储; 结论:1)在存储上,一般 varchar2 类型的数据所占空间比 char 类型的少; 2)在查询效率上,char 类型的比 varchar2 类型的快;(了解) 1.5 instr(s,s1,[m],[n]):表示子字符串 s1 在字符串 s 中,从第 m 位开始检索,第 n 次出现的时候,所 在的位置是哪; 注意:如果 m 是负整数,表示从右第 m 开始向左检索; 如果 m,n 都省略,表示从左边第 1 位开始向右检索,在 s 中第 1 次出现 s1 的位置在哪; 例:字符串‘13802142274’,子字符串‘2’
select instr()from dual; M5TR(*138e2142274','2',-4,1) SQL>select instr('13802142274','2',-5,1)from duali 5TR("13802142274*,2,-5,1) SQL>select instr('13802142274','2',5,2)from dual; I5TR("138e2142274,'2,-5,2) sTR(138e2142274,*2'1,4) 注意:如果在s中找不到子串s1,则显示结果为0 1.61pad(s,m,s1):在字符串s左边补充子串s1,直到长度为n: pad(s,n,s1):在字符串s右边补充子串sl,直到长度为n: 例:将emp表中的ename向左补充到10位: 器ete 14 rows selected, 例:将ep表中的ename向左补充#到15位; QL>select,rpad(ename,15,) ENAME NEW_NAM 14 ros selected. 1.7trin eadingltrailinglboth s1 froms):表示将子字符串sl从s中去除 进意: ading表示将s左边的sl去除;trailing表示将s右边的s1去除;both表示将s两边的sl 去除:(默认
注意:如果在 s 中找不到子串 s1,则显示结果为 0; 1.6 lpad(s,n,s1):在字符串 s 左边补充子串 s1,直到长度为 n; rpad(s,n,s1):在字符串 s 右边补充子串 s1,直到长度为 n; 例:将 emp 表中的 ename 向左补充*到 10 位; 例:将 emp 表中的 ename 向左补充#到 15 位; 1.7 trim(leading|trailing|both s1 from s):表示将子字符串 s1 从 s 中去除; 注意:leading 表示将 s 左边的 s1 去除;trailing 表示将 s 右边的 s1 去除;both 表示将 s 两边的 s1 去除;(默认)
如果s中间包含s1,则不作处理: 例1:默认状况下,是将字符申两边的半角空格去除; SQL>select trim(' abc def 'result from dual; RESULT abc def s0 select trim((both··from·abc def')result from dual; RESULT abc def 如果只去除左边的半角空格? 注意:ltrim在去除字符串中的半角空格时可以使用: s select trim(leading··from abc def result from dual RESULT def s0L>select1trin(”abc dof')result from dual RESULT abc def 如果只去除右边的半角空格? 注意:rtrim在去除字符串中的半角空格时可以使用 soL>select trim(trailing··from·abc def)result from dual; RESULT abe def QL>select rtrim( abc def 'result from duali RESULT abc def 例2:指定去除特定的字符s1; tep1:创建表t04,表定义如下 create umber(2),info varchar2(20)) Table created. 1 ro created. SOL>commit; Comnit complst step3:查询表中的数据: SQL>select from t04; NO INFO step4:如果去除两边的*
如果 s 中间包含 s1,则不作处理; 例 1:默认状况下,是将字符串两边的半角空格去除; 如果只去除左边的半角空格? 注意:ltrim 在去除字符串中的半角空格时可以使用; 如果只去除右边的半角空格? 注意:rtrim 在去除字符串中的半角空格时可以使用 例 2:指定去除特定的字符 s1; step 1:创建表 t04,表定义如下; step 2:添加测试数据,并提交; step 3:查询表中的数据; step 4:如果去除两边的*
SQL>select trim('from info)result from t4; RESULT SQL>select trim(bothfrom info)result from t4; RESULT step5:如果只去除左边的* SQL>select trim(leading '*from info)result from t04; RESULT step6:如果只去除右边的* SQL>select trim(trailing '*from info)result from t04; RESULT 注意:处理字符时,ltrim和rtrim不适用: L.8 replace(s,sL,s2):表示将字符串s中的s1用s2营换掉 例:1.7中得到的表t04中的数据 from te4j NO INFO 10abcdef 将*替换成#(默认将所有的*都用#替换) SQL>select no,replace(info,,)result from t4; NO RESULT 10abcdef 或者部分*替换成# SQL>select no,replace(info,)result from t4; NO RESULT 10##*ab(#*def#"* 例:将‘13802142274'中的‘0214替换成*' SQL>select replace('13802142274','0214',*)result from dual; RESULT 138*2274 注意:如此替换时,s1和s2的字符长度须一致: 拓展:如果此电话号码存储在某张表中,该如何处理? 预想效果138 **2274 step1:创建表t05,字段定义如下
step 5:如果只去除左边的* step 6:如果只去除右边的* 注意:处理字符时,ltrim 和 rtrim 不适用; 1.8 replace(s,s1,s2):表示将字符串 s 中的 s1 用 s2 替换掉; 例:1.7 中得到的表 t04 中的数据 将*替换成# (默认将所有的*都用#替换) 或者部分*替换成# 例:将‘13802142274’中的‘0214’替换成‘****’ 注意:如此替换时,s1 和 s2 的字符长度须一致; 拓展:如果此电话号码存储在某张表中,该如何处理? 预想效果:138****2274 step 1:创建表 t05,字段定义如下;
SQL>create table to5(no number(2),tel varchar2(15)); Table created. 8tp2:添加测试数据,并提交: SOL>insert into t85 values(10,'13802142274'); 1 row created. SQL>comit; Comnit complete step3:查询数据: s0L>select·from t85; NO TEL 1013802142274 step4:格式编辑: sQL>select replace(tel,substr(tel,,4),)result from t5; RESULT 138**274 2.。数字处理函数(住要针对数字的格式进行设定) 2.1 round(c,[n):表示求数字c的四舍五入值: 注意:n表示保留到小数点后面多少位:如果n省略,则保留成整数:如果n为负数,则保留到小数点 左边多少位 D2 D3 D4 D5 提示:如果c=123.457,n=2,则需要看小数点右面第3位血+1),若>=5,则进1,反之舍去: 如果P-2,则需要看小数点左边第2位(),若>-5,则进1,反之舍去: 2.2tunc(c,[n]):表示将数字c截断,保留到小数点后第n位: 注意:n表示保保留到小数点后第n位,则第n位之后的数字,不考虑四合五入,直接合去 如果n省略,则只保留成整数,小数部分直接舍去:如果n为负数,则保留到小数点左边第n位,之后 的数字,不考虑四舍五入,宜接舍去: from dual D1 D3 2.3modm,n:表示取得m除以n得到的余数: 注意:n0时,oda, 小;(特殊)
step 2:添加测试数据,并提交; step 3:查询数据; step 4:格式编辑; 2. 数字处理函数(主要针对数字的格式进行设定) 2.1 round(c,[n]):表示求数字 c 的四舍五入值; 注意:n 表示保留到小数点后面多少位;如果 n 省略,则保留成整数;如果 n 为负数,则保留到小数点 左边多少位; 提示:如果 c=123.457,n=2,则需要看小数点右面第 3 位(n+1),若>=5,则进 1,反之舍去; 如果 n=-2,则需要看小数点左边第 2 位(n), 若>=5,则进 1,反之舍去; 2.2 trunc(c,[n]):表示将数字 c 截断,保留到小数点后第 n 位; 注意:n 表示保保留到小数点后第 n 位,则第 n 位之后的数字,不考虑四舍五入,直接舍去; 如果 n 省略,则只保留成整数,小数部分直接舍去;如果 n 为负数,则保留到小数点左边第 n 位,之后 的数字,不考虑四舍五入,直接舍去; 2.3 mod(m,n):表示取得 m 除以 n 得到的余数; 注意:n=0 时,mod(m,n)=m;(特殊)