Oracle字段number类型与varchar2类型

NUMBER ( precision, scale)

  1.  precision表示数字中的有效位;如果没有指定precision的话,Oracle将使用38作为精度。
  2.  如果scale大于零,表示数字精确到小数点右边的位数;scale默认设置为0;如果scale小于零,Oracle将把该数字取舍到小数点左边的指定位数。
  3.  Precision的取值范围为【1---38】;Scale的取值范围为【-84---127】。
  4.  NUMBER整数部分允许的长度为(precision- scale),无论scale是正数还是负数。
  5.  如果precision小于scale,表示存储的是没有整数的小数。
  6.  Precision表示有效位数,有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数;scale表示精确到多少位,指精确到小数点左边或右边多少位(+-决定)
  7.  Number值类型举例:

实际值

数据类型

存储值

1234567.89

Number

1234567.89

1234567.89

Number(8)

1234567

1234567.89

Number(6)

出错

1234567.89

Number(9,1)

1234567.9

1234567.89

Number(9,3)

出错

1234567.89

Number(7,2)

出错

1234567.89

Number(5,-2)

1234600

1234511.89

Number(5,-2)

1234500

1234567.89

Number(5,-4)

1230000

1234567.89

Number(*,1)

1234567.9

0.012

Number(2,3)

0.012

0.23

Number(2,3)

出错

NUMBER类型的子类

a)  oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。

b)  int类型只能存储整数;number可以存储浮点数,也可以存储整数。

c)  在oracle数据库建表的时候,decimal,numeric不带精度,oracle会自动把它处理成INTEGER;带精度,oracle会自动把它处理成number。

d)  Oracle只用NUMBER(m,n)就可以表示任何复杂的数字数据。

e)  decimal,numeric,int等都为SQL、DB2等数据库的数据类型,ORACLE为了兼容才将其引入;但实际上在ORACLE内部还是以NUMBER的形式将其存入。

 


 

char  --  的长度为一个字节,表达的数值范围是0~255,CHAR的长度是固定的;

varchar -- 存放定长的字符数据,最长2000個字符;

varchar2 -- 存放可变长字符数据,最大长度为4000字符。

 

char对于不够位数的用空格添补,varchar2不用。可以试着比较一下。

varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;

VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;

VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,

 

varchar2和varchar的目前没有区别,不过ocacle以后的版本就不支持varchar类型,如果想新版本的数据库兼容就不要用varchar,如果想和其它数据库兼容就不要用varchar2

大部分情况下建议使用varchar2类型,可以保证更好的兼容性。

 

何时该用CHAR,何时该用varchar2? 
  CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系. 
  VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。 
  VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。 
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用TO_CHAR函数将OracleNUMBER类型转换为VARCHAR类型。 例如,将一个名为num的NUMBER类型字段转换为VARCHAR类型,可以使用以下语句: SELECT TO_CHAR(num) FROM 表名; 其中,TO_CHAR函数将num字段转换为字符串类型。如果需要指定转换后的格式,可以在TO_CHAR函数中添加第二个参数,例如: SELECT TO_CHAR(num, '999,999.99') FROM 表名; 这将把num字段转换为带有千位分隔符和两位小数的字符串类型。 ### 回答2: Oracle数据库中,将Number类型转换为Varchar类型需要使用TO_CHAR函数。使用该函数可以将Number类型的数据转换为Varchar类型的字符串表示。 TO_CHAR函数的语法如下: TO_CHAR(number_value, [format_mask], [nls_language]) 其中,number_value指需要转换的Number类型的数据,format_mask指格式模板,nls_language指定语言环境(可选)。 如果format_mask未指定,则会按默认格式将Number类型转换为Varchar类型。如果需要指定格式模板,则可以通过格式化元素来更改日期格式。 例如,要将Number类型的数据转换为字符串,可以使用以下语句: SELECT TO_CHAR(123.45) FROM DUAL; 这会将Number类型的数据“123.45”转换为Varchar类型的字符串:“123.45”。 如果需要指定格式模板,则可以使用以下语句: SELECT TO_CHAR(123.45, '$999G999D99') FROM DUAL; 这会将Number类型的数据“123.45”转换为Varchar类型的字符串:“$123.45”。 需要注意的是,TO_CHAR函数返回的结果是Varchar类型的字符串,其长度可能不适合用作列的数据类型。因此,在使用TO_CHAR函数时需要将字符串长度限制在列长度之内,以免发生截断。并且,还需要考虑到字符集和语言环境的影响。 ### 回答3: Oracle数据库中,我们经常需要将一个number类型字段转换为varchar类型,这在很多应用场景中都非常常见,比如我们需要将数字类型字段转成字符串类型进行拼接或格式化输出等。那么在Oracle数据库中,如何将number类型转换成varchar类型呢?主要有以下三种方法: 1. 使用TO_CHAR函数进行类型转换 在Oracle中,可以使用TO_CHAR函数将number类型字段转换为varchar类型。TO_CHAR函数需要两个参数,第一个参数为需要转换的number类型字段,第二个参数为转换后的格式,如下所示: TO_CHAR(字段名, '格式') 其中‘格式’为转换后的字符串格式,如‘9999’代表将数字类型转为四位,保留至少1位的字符类型。具体格式参数可以参考Oracle官方文档。 示例: SELECT TO_CHAR(num, '999999') AS varchar_num FROM table; 2. 使用CAST函数进行类型转换 另一种将number类型转换成varchar类型的方法是使用CAST函数。CAST函数需要两个参数,第一个参数为需要转换的number类型字段,第二个参数为转换后的varchar类型。如下所示: CAST(字段名 AS VARCHAR2(长度)) 其中‘长度’为转换后的varchar类型的长度。 示例: SELECT CAST(num AS VARCHAR2(6)) AS varchar_num FROM table; 3. 使用CONVERT函数进行类型转换: 最后一种将number类型转换成varchar类型的方法是使用CONVERT函数。CONVERT函数需要两个参数,第一个参数为需要转换的number类型字段,第二个参数为转换后的varchar类型格式。如下所示: CONVERT(字段名, VARCHAR2(长度)) 其中‘长度’为转换后的varchar类型的长度。 示例: SELECT CONVERT(num, VARCHAR2(6)) AS varchar_num FROM table; 总的来说,上述三种方法都可以将number类型字段转换成varchar类型。不过需要注意的是,在进行类型转换时,需要考虑精度问题,以免产生数据丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值