1)oracle中substr函数的用法
1、substr(string string, int a, int b)
参数1:string 要处理的字符串
参数2:a 截取字符串的开始位置(起始位置是0)
参数3:b 截取的字符串的长度(而不是字符串的结束位置)
例如:
substr("ABCDEFG", 0); //返回:ABCDEFG,截取所有字符
oracle decimal类型substr("ABCDEFG", 2); //返回:CDEFG,截取从C开始之后所有字符
substr("ABCDEFG", 0, 3); //返回:ABC,截取从A开始3个字符
substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。
substr("ABCDEFG", 0, -3); //返回:EFG,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。
2、substr(string string, int a)
参数1:string 要处理的字符串
参数2:a 可以理解为从索引a(注意:起始索引是0)处开始截取字符串,也可以理解为从第 (a+1)个字符开始截取字符串。
例如:
substr("ABCDEFG", 0); //返回:ABCDEFG, 截取所有字符
substr("ABCDEFG", 2); //返回:CDEFG,截取从C开始之后所有字符
================================================================================================================================
2)Oracle中Instr函数用法
在项目中用到了Oracle中 Instr 这个函数,顺便仔细的再次学习了一下这个知识。
Oracle中,可以使用 Instr 函数对某个字符串进行判断,判断其是否含有指定的字符。
其语法为:
Instr(string, substring, position, occurrence)
其中
string:代表源字符串;
substring:代表想聪源字符串中查的子串;
position:代表查的开始位置,该参数可选的,默认为 1;
occurrence:代表想从源字符中查出第几次出现的substring,该参数也是可选的,默认为1;
如果 position 的值为负数,那么代表从右往左进行查。
返回值为:查到的字符串的位置。
对于 Instr 函数,我们经常这样使用:从一个字符串中查指定子串的位置。
例如:
SELECT Instr('Hello Word', 'o', -1, 1) "String" FROM Dual 的显示结果是
Instring
————
8
================================================================================================================================
3)nvl( ) 函数
从两个表达式返回一个非 null 值。
语法
NVL(eExpression1, eExpression2)
参数
eExpression1, eExpression2
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
返回值类型
字符型、日期型、日期时间型、数值型、货币型、逻辑型或
null 值
说明
在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计算或操作中的 null 值。
select nvl(a.name,'空得') as name from student a join school b on a.ID=b.ID
注意:两个参数得类型要匹配
==============================================================================================================================
4)oracle中的length()函数
问题1oracle中的函数length(char),为什么可以写成length(123),length('abc'),但是length(123asd)和length(asd)就不行了?
解答:length(123)=3,是计算123的长度
length('abc')=3,是计算'abc'的长度
length(123asd)和length(asd)中,函数将其当做是变量,因为它既不是有效的数字,也不是有效的字符串(如'aaaaaa',带引号的),所以就会出现"标识符无效"等错误。
问题2。在oracle里出现的,取数据库中一个字符类型列的长度,是个类别字段用的是char(10) bigcata
如 大类都是两位数 01,02等 类别不多 小类就是0101,0102,0201,0202
本来我想 select xxx from xxx where length(bigcata ) = 2 没结果
select bigcata , length(bigcata )from xxx 结果全是10
01  10
02  10
测试了下varchar2类型的 却是好的(bigcata 的类型改成 varchar2(10))
123aa  5
aa2    3
是不是在oracle中 length()函数对char类型无效呢
解答:先trim()再取length()
select xxx from xxx where length(trim(bigcata) ) = 2
因为char是固定长度的如果长度不够后面要补空格的
length()函数的改装
Oracle下的Length()函数不能区分中英文,只能得到字符数而不能得到字节数,很多时候插入string到字段中时总要先进行一次检查,防止 string长度超过了字段定义的长度,一般大家都是把这个检测放到应用程序中执行,用我写的这个小函数就可以实现在数据库服务器端对要插入的字段进行检测。
  create or replace function f_henry_GetStringLength(pv_String in varchar2) return integer is
  Result integer;
  i number;
  begin
  Result:=0;
  if length(pv_String)=0 then
  return(Result);
  end if;
  for i in 1 .. length(pv_String) loop
  if ascii(substr(pv_String,i,1))<256 then
  Result:=Result+1;
  else
  Result:=Result+2;
  end if;
  end loop;
  return(Result);
  end f_henry_GetStringLength;
  /*************************以下是测试***************************/
  SQL> select length('啊$@oii发大幅') from dual;
  LENGTH('啊$@OII发大幅')
  -----------------------
  9
  SQL> select f_henry_GetStringLength('啊$@oii发大幅') from dual;
  F_HENRY_GETSTRINGLENGTH('啊$@O
  ------------------------------
  13
=====================================================================================================
=========================
5)oracle trunc函数用法
1. TRUNC(for dates)
  TRUNC函数为指定元素而截去的日期值。
  其具体的语法格式如下:
  TRUNC(date[,fmt])
  其中:
  date 一个日期值
  fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
 2.TRUNC(for number)
  TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
  其具体的语法格式如下
  TRUNC(number[,decimals])
  其中:
  number 待做截取处理的数值
  decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
  下面是该函数的使用情况:
  TRUNC(89.985,2)=89.98
  TRUNC(89.985)=89
  TRUNC(89.985,-1)=80
  注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。
==============================================================================================================================

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。