Oracle_中to_char和to_number等格式处理

oracle to_numberto_char介绍

to_number(文字,’格式’)
to_char(
数字, ‘格式’)
to_char()
这次只介绍to_char(数字, ‘格式’),明天介绍日期转化的。

主要格式如下:
9
表示有效位数
0
数字前用0补足位数
B
用空格补足位数
$
在数字前加美元号
L
在数字前加本地货币符号
.
小数点位置
,
分格符位置
MI
负数时在最后边加负号
PR
负数用<>括起来
S
在前面加符号
EEEE
科学计数法
V
把原数字乘以10N次方(NV后面的位数)

to_number
函数如下:

Converts a string to the NUMBER data type

TO_NUMBER([, , ]) RETURN NUMBER

CREATE TABLE test (
testcol VARCHAR2(10));

INSERT INTO test VALUES ('12345.67');

SELECT
TO_BINARY_DOUBLE(testcol) BIN_DOUBLE, TO_BINARY_FLOAT(testcol) BIN_FLOAT, TO_NUMBER(testcol) NMBR
FROM test;

Converts a HEX number to FLOAT

TO_NUMBER(, );

SELECT TO_NUMBER('0A', 'XX')
FROM dual;

Converts a HEX number to DECIMAL

TO_NUMBER(,
'') RETURN ;

SELECT TO_NUMBER(100000,'XXXXXXXX')
FROM dual;

在垃圾短信项目中,用到了to_number方法,表中starttime字段存的是某一时间到199411 00:00:00的秒数,字段类型为RAW,由于项目的原因,要涉及到改字段的时间比较。考虑了半天,将某一时间到199411 00:00:00的秒数传入当做参数,然后将starttime转换成16进制,再通过to_number转换成数字,然后再比较。SQL语句如下:

select * from black_user_info where TO_NUMBER(rawtohex(starttime),'XXXXXXXX') >496022400;

但是经过测试发现 select * from black_user_info where TO_NUMBER(starttime,'XXXXXXXX') >496022400   好像也有同样的效果。raw类型和16进制有很密切的关系,因为在数据库里面,数字的raw类型就是按照16进制保存的,具体的关系就不是很清楚了,目前基本上一个ORACLE盲。

1. 9 0 B 测试

SELECT

    to_char(123.45,'0009.9'),

    to_char(123.45,'9999.9'),

    to_char(123.45,'B999.9')

FROM dual;

结果为

TO_CHAR(123.45,'0009.9') TO_CHAR(123.45,'9999.9') TO_CHAR(123.45,'B999.9')

------------------------ ------------------------ ------------------------

 0123.5                    123.5                   123.5

2. $ L 测试

SELECT

    to_char(123.45,'$9999.9'),

    to_char(123.45,'L9999.9')

FROM dual;

结果为

TO_CHAR(123.45,'$9999.9') TO_CHAR(123.45,'L9999.9')

------------------------- -------------------------

  $123.5                           ¥123.5

3. ., 测试

SELECT

    to_char(123.45,'9999.99'),

    to_char(1233123.45,'9,999,999.99')

FROM dual;

结果为

TO_CHAR(123.45,'9999.99') TO_CHAR(1233123.45,'9,999,999.

------------------------- ------------------------------

  123.45                   1,233,123.45

4. MIPR 测试

SELECT

    to_char(-123.45,'9999.99MI'),

    to_char(-123.45,'9999.99PR')

FROM dual;

结果为

TO_CHAR(-123.45,'9999.99MI') TO_CHAR(-123.45,'9999.99PR')

---------------------------- ----------------------------

 123.45-                      <123.45>

5. SEEEEV 测试

SELECT

    to_char(123.45,'S9999.99'),

    to_char(12345,'99.99EEEE'),

    to_char(123,'9999V99')

FROM dual;

结果为

TO_CHAR(123.45,'S9999.99') TO_CHAR(12345,'99.99EEEE') TO_CHAR(123,'9999V99')

-------------------------- -------------------------- ----------------------

 +123.45                     1.23E+04                   12300

 

原文链接: http://wenku.baidu.com/view/e6a9488d84868762caaed5d3.html

你可能感兴趣的:(Oracle,函数)