oracle中to_char 的用法求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中to_char 的用法求解相关的知识,希望对你有一定的参考价值。

现在有一个表a,有一个字段id,类型为number
insert into a values(to_char(100.00,'999,999.00'));
insert into a values(to_char(1000.00,'999,999.00'));
第一行没问题,可以插入,第二行就会出现无效数字的错误
我要怎样修改to_char方法 来实现第二行sql,
求高手

你这个用的有问题,to_char(100.00, 'FM999,990.00')
如果你不加FM的话,插入之后会有空格在数字前面,以你写的100.00举例,这样你插入之后100之前就会有3个空格;假如你插入0.00的话,小数点前面那个0是显示不出来的,你看到的应该是 .00 。
你这样写是没有问题的,具体报的错误能贴出来么?追问

这个不会出现0.00的数据,因为数据库设置的不能为空,我是想实现
insert into a values(to_char(1000.00,'999,999.00'));
这行sql,但是实现不了,报的错误:ORA-10722:无效数字
这个说的够明确了么,能解决么?

追答

你这个字段是什么类型的?如果是数字的话由于在1000.00的时候转换为了1,000.00,这样才会报无效数字,因为逗号分隔符不属于数字,你需要把字段类型改成字符类型。并且即使你插入的时候不会有0.00,还是建议你把FM加上,这样不会出现空格的问题。

参考技术A 因为你的a表中的字段是数字型的,所以保存的只能是数值
不能保存为带格式的(实际上带格式的数字都是字符串)

第一个可以是因为转换之后是一个可以转换为数值的字符串,而第二个则无法转换为数值。
你应该是需要展现的时候才使用to_char转换为目标格式。
参考技术B 你这个ID字段应该定义成varchar2,而不是number。 参考技术C 类型为number为啥要to_char啊 应该to_number啊追问

因为我要格式化成100,000,000.00这种格式的 to_number能实现么?

追答

当然啊

追问

把你的sql贴出来 我看看怎么实现的

oracle(cast , to_char , to_date )用法

cast :

cast(要转换的值 AS 转换的类型)

FromTo BINARY_FLOAT, BINARY_DOUBLETo CHAR, VARCHAR2To NUMBERTo DATETIME, INTERVALTo NCHAR, NVARCHAR2

BINARY_FLOAT, BINARY_DOUBLE

yes

yes

yes

no

yes

CHAR, VARCHAR2

yes

yes

yes

yes

no

NUMBER

yes

yes

yes

no

yes

DATETIME, INTERVAL

no

yes

no

yes

yes

NCHAR, NVARCHAR2

yes

no

yes

no

yes

Example

CAST(‘123.4567‘ AS NUMBER(10,2)) returns the value 123.46.

通过上面的描述,我们就可以知道CAST可以将一种类型转换为另外一种类型。

比如,将字符串类型转换为NUMBER(10,2)类型,而不仅仅是限于使用用to_number、to_char()以及to_date()类型,上述表Table 3-1代表CAST是否能够用于该类型的相互转换。

例子调用:

ChenZw> SELECT CAST(‘123.4567‘ AS NUMBER(10,2))  AS NUM FROM DUAL;  输出123.46

 

to_char:    

转换成字符串类型
SELECT TO_CHAR(sysdate, ‘YYYY/MM/DD HH24:mi:ss‘) FROM DUAL

sysdate:要转换的值 ,后面的是转的类型(字符串类型的)  

 

函数返回描述例子
to_char(timestamp, text) text 把 timestamp 转换成 string to_char(timestamp ‘now‘,‘HH12:MI:SS‘)
to_char(int, text) text 把 int4/int8 转换成 string to_char(125, ‘999‘)
to_char(float, text) text 把 float4/float8 转换成 string to_char(125.8, ‘999D9‘)
to_char(numeric, text) text 把 numeric 转换成 string to_char(numeric ‘-125.8‘, ‘999D99S‘)
to_date(text, text) date 把 string 转换成 date to_date(‘05 Dec 2000‘, ‘DD Mon YYYY‘)
to_timestamp(text, text) date 把 string 转换成 timestamp to_timestamp(‘05 Dec 2000‘, ‘DD Mon YYYY‘)
to_number(text, text) numeric 把 string 转换成 numeric to_number(‘12,454.8-‘, ‘99G999D9S‘)

to_date:把值转换成日期类型的。

SELECT TO_DATE(‘2007-06-12 10:00:00‘, ‘YYYY/MM/DD HH24:mi:ss‘) FROM DUAL  --> 输出  2007/6/12 星期二 上午 10:00:00

 

以上是关于oracle中to_char 的用法求解的主要内容,如果未能解决你的问题,请参考以下文章

to_char()的用法

Oracle 查询今天昨日本周本月和本季度的所有记录

oracle 中to_char函数的用法

yii2 oracle 原生sql分页

oracle里nvl,to_char,decode这些函数怎么用啊?

oracle(cast , to_char , to_date )用法