oracle使用自带函数注意问题

来源:互联网 发布:网络支付软件有哪些 编辑:程序博客网 时间:2024/06/15 21:15

对于oracle函数特殊情况处理问题:

一定要注意并且弄清楚函数参数边界:参数超出指定范围和小于指定范围,函数是如何规定和处理的。

防止在项目中使用该函数出现函数参数超出边界引发的异常。


(一)to_char():该函数用于将日期或者数字转换为指定格式的字符串

使用格式:to_char(数字或者日期,‘格式’);

1、对于日期,oracle中,24小时制:HH24:mi:ss或者hh24:mm:ss ; 12小时制:hh12:mi:ss 或者hh:mm:ss 

注意:SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。

对于SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),使用SimpleDateFormat类来格式化日期时一定要注意大小写,大写的H:是24小时制;小写的h:是12小时制。

在项目中,对于日志记录会有影响。


2、对于数字转换:用0或者9来表示占位符

用0表示占位符:小于指定范围,高位补0;超出范围,显示##(#的个数和指定位数一致)

用9表示占位符:小于指定范围,高位补空格;超出范围,显示##(#的个数和指定位数一致)

注意:to_char()函数格式化数字,结果左侧有空格。

原因:Number类型转换为字符时,负数会返回前面包含负号的字符串,正数则会返回前面包含空格的字符串,除非格式模式包含MI、S、或PR元素。

解决方法:

第一种方法:使用trim()函数:trim(字符串或者数字);具有删除任意指定字符的功能,也可用于用于删除字符串首尾两端的空格

trim(to_char(1234,'00000'));这样即可取出空格。

注意:删除多个字符需要使用ltrim()或者rtrim()函数:ltrim(字符串或者数字,要删除的字符串或者数字)。删除的过程是单个字符比较,相同就删除。例如:ltrim(1222334,12)结果为:334


第二种方法:使用参数MI:MI参数是正数的空格放到字符串后面,将负数的负号放置在字符串后面

格式:to_char(1233,'0000MI') 结果为:1233;前面没有空格。


第三种方法:使用replace()函数:replace(字符串或者数字,需要查找的字符串或者数字,要替换成的字符串或者数字);

例如:replace('abcddd','dd','ff'); 结果为:abcffd。



(二)lpad()和rpad()函数:给字符串从左侧或者右侧填充指定字符

使用格式: lpad( string, n, [pad_string]);

string:字符串或者列名            n:指定字符串的长度      pad_string:左侧要填充的字符串,默认是空格(可选参数)

注意:超出指定长度:从个位开始去除超出的位数,这种情况:lpad()和rpad()函数的处理是一样的,都是从低位去除。例如:lpad(12345,3)结果为:123


(三)||在oracle中是连接运算符即双竖杠

注意:在使用连接运算符连接两个to_char()函数时,一定要注意空格问题


(四)oracle中日期的比较

oracle中是Date,java中也是Date类型

在where查询条件中,使用to_date(日期字符串,日期格式)函数:将字符串转换为指定格式的日期,在比较大小,效率更好。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss'from dual;


(五)oracle中的序列:sequence

没有添加循环cycle,当超过最大值时,会报错。