- 浏览: 74886 次
文章分类
oracle中to_char函数转换后多出空格的问题
- 博客分类:
- oracle
今天编写往数据库中插入200万数据的存储过程,遇到to_char的问题,记录下来与大家分享。
主键id为32位varchar类型,由数字组成,高位用0补足,例如'00000000000000000000000000000001'。
存储过程如下:
create or replace procedure insertintouserstmp20151104(numb in number) as
user_id varchar2(32);
i number := 1;
begin
for i in 1..numb loop
user_id := to_char(UCMP_INSERTUSER.Nextval,'00000000000000000000000000000000');--UCMP_INSERTUSER为自增序列
insert into users_tmp20151104(user_id,password,status,type_code,cust_type,register_source,create_tm,mem_no,nick_name,account_status)
values(user_id,'af8f9dffa5d420fbc249141645b962ee','Y','0','0','1',sysdate,user_id,user_id,'1');
if(mod(i,1000)=0) then
commit;
end if;
end loop;
commit;
end insertintouserstmp20151104;
调用存储过程时提示user_id长度为32位,实际为33位,测试发现是to_char指定了转换格式参数后,长度比预想的32位多了一位
select length(to_char(11)) from dual;--2
select length(to_char(11,'00')) from dual;--3
网上查询资料发现,to_char转换指定格式时,字符串前面增加了一个空格,所以长度比指定格式长度增加了1,网上流传原因是:那个空格位置是放符号的,正的数字就空了,负的就是一个‘-’号而没有空格。
select length(to_char(1,'00')) from dual;-- 3
select length(to_char(-1,'00')) from dual;-- 3
解决方法:用trim转换或者fm
select length(trim(to_char(1,'00'))) from dual;-- 2
select length(to_char(1,'fm00')) from dual;-- 2
再执行存储过程,运行成功,ok!
主键id为32位varchar类型,由数字组成,高位用0补足,例如'00000000000000000000000000000001'。
存储过程如下:
create or replace procedure insertintouserstmp20151104(numb in number) as
user_id varchar2(32);
i number := 1;
begin
for i in 1..numb loop
user_id := to_char(UCMP_INSERTUSER.Nextval,'00000000000000000000000000000000');--UCMP_INSERTUSER为自增序列
insert into users_tmp20151104(user_id,password,status,type_code,cust_type,register_source,create_tm,mem_no,nick_name,account_status)
values(user_id,'af8f9dffa5d420fbc249141645b962ee','Y','0','0','1',sysdate,user_id,user_id,'1');
if(mod(i,1000)=0) then
commit;
end if;
end loop;
commit;
end insertintouserstmp20151104;
调用存储过程时提示user_id长度为32位,实际为33位,测试发现是to_char指定了转换格式参数后,长度比预想的32位多了一位
select length(to_char(11)) from dual;--2
select length(to_char(11,'00')) from dual;--3
网上查询资料发现,to_char转换指定格式时,字符串前面增加了一个空格,所以长度比指定格式长度增加了1,网上流传原因是:那个空格位置是放符号的,正的数字就空了,负的就是一个‘-’号而没有空格。
select length(to_char(1,'00')) from dual;-- 3
select length(to_char(-1,'00')) from dual;-- 3
解决方法:用trim转换或者fm
select length(trim(to_char(1,'00'))) from dual;-- 2
select length(to_char(1,'fm00')) from dual;-- 2
再执行存储过程,运行成功,ok!
发表评论
-
oracle之分析函数
2020-03-11 14:07 0row_number() over(partition by ... -
oracle之日期函数
2016-12-20 10:55 9041、sysdate:返回当前日期 2、add_months(d ... -
oracle之数据字典
2016-07-18 18:55 0Oracle字典视图包括 ... -
oracle之回滚和undo表空间
2016-07-12 16:19 0Oracle undo表空间爆满的解决 1. 启 ... -
oracle之dblink
2016-07-12 14:34 0有时候需要从另一 ... -
oracle之监听配置文件
2016-07-11 13:57 0listener.ora文件为配置在oracle服务器 ... -
oracle之异常学习
2016-07-05 18:22 803ORACLE异常包括预定义异常,非预定义异常,自定义异常。 1 ... -
oracle的regexp_like函数使用正则表达式
2016-07-08 10:17 8894一、正则表达式入门 1. ... -
oracle中on、where、having的区别
2016-05-27 11:49 0http://www.cnblogs.com/java-cla ... -
面试准备
2016-05-14 22:57 0web安全测试: http://blog.sina.com.c ... -
常用sql
2016-04-28 15:52 01、删除表中重复数据 方式一:rowid select * f ... -
oracle之高水位线
2016-03-24 18:25 0insert /*+append*/ into table1 ... -
oracle11g自动分区
2016-03-23 21:07 879最近工作中需要给数据库创建分区,简单学习了一下,做下笔 ... -
oracle中rowid与rownum学习
2016-03-21 16:00 0rowid与rownum 都被称为伪列,但它们的存在方 ... -
SST
2016-01-21 16:57 0会员系统通过MQ获取CDH月结账号数据代码 1、插入 插 ... -
oracle排查异常sql的一些方法
2015-11-19 15:27 952转自http://blog.itpub.net/2315585 ... -
oracle导入导出
2015-11-13 18:37 0Oracle数据导入导出imp/exp就相当于oracle数据 ... -
oracle索引学习
2015-11-12 16:45 0一、索引基础 1、索引 ... -
好的网站
2015-09-11 13:54 0plsql开发笔记和小结 http://www.blogjav ... -
merge用法总结
2015-08-04 19:32 01、merge语法 merge [hit] into [ ...
相关推荐
2.解决办法:用to_char函数格式化数字显示 select to_char(0.338,’fm9999999990.00′) from dual; 结果:0.34 这里重点要看 fm9999999999.99,表示整数部分最多10位,小数部分2位,fm表示去 掉转位字符串后前面的空格,...
ORACLE函数大全 ________________________________________ 作者:[本站编辑] 来源:[CSDN] 浏览:[ ] SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,...
Oracle常用字符串处理函数: 函数格式: LTRIM(string,[,'set']); RTRIM(string,[,'set']); 、string是数据库中类型为CHAR或VARCHAR2的列名(或常量串); 、set是要截断的字符,set必须用单引号括起,方括号表示set...
Oracle 数据类型及存储方式 概述 通过实例,全面而深入的分析oralce的基本数据类型及它们的存储方式。以ORACLE 10G为基础,介绍oralce 10g引入的新的数据类型。让你对oracle数据类型有一个全新的认识。揭示一些不...
SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE --------- --------- --------- --------- ...
§2.3.1 多记录组函数 73 §2.3.2 带 GROUP BY 的计算 75 §2.3.3 用 HAVING 来限制分组的计算 75 §2.4 控制和格式化输出 76 §2.4.1 用 ORDER BY 子句来对结果进行排序 76 §2.4.2 用 BREAK 命令 来对结果进行排列...
CHAR (5) 和 VARCHAR2(5)的区别是 CHAR不足5位后面自动加上空格,VARCHAR2不加 三、 列的非空属性NOT NULL: 如果一个列具有非空属性,则在给该表增加、修改数据时必须保证该列有内容,否则会出错。 如果一个列允许...
认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 oracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程...
5、DATE数据类型,使用7个字节固定长度,每个字节分别存储世纪,年,月,日 ,时,分,秒,ORACLE中SYSDATE函数的功能是返回当前的日期和时间 6、TIMESTAMP数据类型,和DATE相似,但是这个类型的秒精确到小数点后6...
函数一般在数据上执行,它给数据的转换和处理提供了方便。不同的DBMS提供的函数不同。 函数可能会带来系统的不可移植性(可移植性:所编写的代码可以在多个系统上运行)。 加入注释是一个使用函数的好习惯。 大多数...
4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC 6) PL/SQL: 存储在数据库内运行, 其他方法为在数据库外对数据库访问,只适合ORACLE; 2. PL/SQL 1) PL/SQL(Procedual language/SQL)...
在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb '...
在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb ...
在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb '...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...