`

Oracle的数据类型转换 to_char(date)

阅读更多

原创   Oracle的数据类型转换 to_char(date) 

Oracle的数据类型转换
Oracle的数据类型转换分为显式数据类型转换和隐式类型转换

在通常情况下,隐式数据类型转换是可用的,但建议你做显示数据类型转换以确保SQL的可靠性.
显式的数据类型转换包括:

to_number 字符转换为数字
to_date 字符转换为日期
to_char 数字转化为字符
to_char 日期转化为字符
TO_CHAR(date,'format_model')
必须加单引号,并且区分大小写
能够包含任一有效的日期格式元素
有一个fm元素用来删除填补的空,或者前导零
用一个逗号与日期值分开
select employee_id,to_char(hire_date,'MM/YY') as month
from employees
where last_name='Higgins'

employee_id month
205 06/94

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss am') as today from dual
2006-06-24 13:39:06 下午
select to_char(to_date('21-1月-95'),'yyyy-mm-dd hh24:mi:ss am') as today from dual
1995-01-21 00:00:00 上午
select to_char(sysdate,'dd "of" month') from dual
24 of 6月
select to_char(syadate,'yyyy-mm-dd cc') from dual
2006-06-24 21
cc:世纪
select to_char(sysdate,'yyy-mm-dd cc') as today from dual
006-06-24 21

select to_char(sysdate,'yy-mm-dd cc') as today from dual
06-06-24 21

select to_char(sysdate,'y,yyy-mm-dd cc') as today from dual
2,006-06-24 21
The following are number examples for the to_char function.
to_char (1210.73, '9999.9') would return '1210.7'
to_char (1210.73, '9,999.99') would return '1,210.73'
to_char (1210.73, '$9,999.00') would return '$1,210.73'
to_char (21, '000099') would return '000021'

The following is a list of valid parameters when the to_char function is used to convert a date to a string. These parameters can be used in many combinations.

ParameterExplanation
YEAR Year, spelled out
YYYY 4-digit year
YYY
YY
Y
Last 3, 2, or 1 digit(s) of year.
IYY
IY
I
Last 3, 2, or 1 digit(s) of ISO year.
IYYY 4-digit year based on the ISO standard
Q Quarter of year (1, 2, 3, 4; JAN-MAR = 1).
MM Month (01-12; JAN = 01).
MON Abbreviated name of month.
MONTH Name of month, padded with blanks to length of 9 characters.
RM Roman numeral month (I-XII; JAN = I).
WW Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
W Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
IW Week of year (1-52 or 1-53) based on the ISO standard.
D Day of week (1-7).
DAY Name of day.
DD Day of month (1-31).
DDD Day of year (1-366).
DY Abbreviated name of day.
J Julian day; the number of days since January 1, 4712 BC.
HH Hour of day (1-12).
HH12 Hour of day (1-12).
HH24 Hour of day (0-23).
MI Minute (0-59).
SS Second (0-59).
SSSSS Seconds past midnight (0-86399).
FF Fractional seconds.

The following are date examples for the to_char function.

to_char (sysdate, 'yyyy/mm/dd'); would return '2003/07/09'
to_char (sysdate, 'Month DD, YYYY'); would return 'July 09, 2003'
to_char (sysdate, 'FMMonth DD, YYYY'); would return 'July 9, 2003'
to_char (sysdate, 'MON DDth, YYYY'); would return 'JUL 09TH, 2003'
to_char (sysdate, 'FMMON DDth, YYYY'); would return 'JUL 9TH, 2003'
to_char (sysdate, 'FMMon ddth, YYYY'); would return 'Jul 9th, 2003'

You will notice that in some examples, the format_mask parameter begins with "FM". This means that zeros and blanks are suppressed. This can be seen in the examples below.

to_char (sysdate, 'FMMonth DD, YYYY'); would return 'July 9, 2003'
to_char (sysdate, 'FMMON DDth, YYYY'); would return 'JUL 9TH, 2003'
to_char (sysdate, 'FMMon ddth, YYYY'); would return 'Jul 9th, 2003'

The zeros have been suppressed so that the day component shows as "9" as opposed to "09".





Oracle函数to_char转化数字型指定小数点位数的用法

to_char ,函数功能,就是将数值型或者日期型转化为字符型。

比如最简单的应用:


Select TO_CHAR (1.0123) FROM DUAL

Select TO_CHAR (123) FROM DUAL

接下来再看看下面:


SELEC TO_CHAR (0.123) FROM DUAL

上面的结果 '.123' 在大多数情况下都不是我们想要的结果,我们想要的应该是 '0.123'。

我们来看一下to_char 函数的具体用法:

TO_CHAR

 ( n [, fmt [, 'nlsparam']] )
该函数将NUMBER类型的n按数值格式fmt转换成VARCHAR2类型的值。'nlsparams' 指定由数值格式的元素返回的字符,包括:

.小数点字符

.组分隔符

.本地钱币符号

.国际钱币符号

变元的形式为:


'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'

其中d为小数点字符,g为组分隔符。

例 :TO_CHAR (17145, 'L099G999' ,'NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"' )=NUD017,145

通过上面的了解,再查看fmt的一些格式,我们可以用以下表达式得到'0.123'的值:


Select TO_CHAR (0.123,'0.999' ) FROM DUAL

Select TO_CHAR (100.12,'0.999' ) FROM DUAL

Select TO_CHAR (1.12,'0.999' ) FROM DUAL

' 0.123'是出来了,可是前面又多了一个空格。

对于 100.12 的值却是######,以及'1.12'的值变成了 '1.120'。

我们重新确定一个新的需求:

1、去空格

2、小数点最多4位,最少保留2位。

1--->'1.00';1.1--->'1.00';1.12-->'1.12';1.1234--->'1.1234';

1.12345--->'1.1235'

最终实现如下:


Select TO_CHAR (123.0233, 'FM9999999.0099' ) FROM DUAL

PLSQL小经验一、 Oracle的to_char ()函数功能很强大但是在用它格式化数值型数据时应该请注意以下几项。如果是小数如:0.23这样的数据经过to_char 后 再<strong onmouseover="isShowAds = true;isShowAds2 = true;ads.Move(this,"http://rad.17luntan.com/UploadImage/17 /633111011619218750.gif","%u89C1%u6240%u672A%u89C1%uFF01%u62A2%u8D2DLG%u9510%u6BD4%u6DB2%u6676%uFF0C%u8D60%u65E0%u7EBF%u5927%u793C%21","42887"," 显示","%u663E%u793A%20","http%3A//210.192.100.35/11779028996160http%3A //www.lgemonitor.com.cn/mnt/index.html%3F11779028996160", event)" style="FONT-WEIGHT: normal; CURSOR: hand; COLOR: #0000ff; TEXT-DECORATION: underline" onclick="javascript:window.open("http://s0.17luntan.com/ClickPortal/WebClick.aspx?id=42887&k=%u663E%u793A&siteid=95d6d193-1fb9-4fc0-8708-b7ceb3276924&url=http%3A//wisebo.bokee.com/viewdiary.15801227.html&gourl=http%3A//210.192.100.35/11779028996160http%3A//www.lgemonitor.com.cn/mnt/index.html%3F11779028996160&parm=C794E0A4A49DF5F353EA88008FD215212B465427A50DDCDB&alliedsiteid=148");" onmouseout="isShowAds = false;isShowAds2 = false">显示会变为.23,如果你为了让它显示出原来的0.23的话就得用To_char (要格式化的数值,’0.999’)保留三个小数,并显示但这里就要注意了。他为你截取小数的时候是四舍五入了。所以如果是要求截掉小数而不四舍五入的话就应该自己写个函数截下去后再规格化。以保证它不四舍五入。

二、 To_char (1.9999,’FM90.0999’) 这个函数规格化时90.0999的含义是有9的地方如果有数字就显示如果没有数字就不显示,有0的地方在没有数字的时候也会有0来占位.但这样做也有一个 很大的缺点,就是如果是整数时它也仍然会显示”.”,不要小瞧这个点,一般来讲页面上要显示的话这个点就是多余的.也给我们造成了不小的麻烦.还要自己再 写函数来把这个小点搞定.

三、对于日期型的Oracle倒时提供了一个好的处理方法,可以把日期做成数值型的.然后再To_char 就能显示出你所需要的类型了.

四、 在使用select into时一定要注意,这种方法你一定要确认肯定会有数据被查出时才能使用.如果查询结果为空时会导致报错.还有一种情况是查出来的数据是多条也会报错.所以应该尽量便宜游标来做.会减少错误产生的机率.

五、 还有注意一点rownum不支持排序,就是说你想用这个来控制行数的话就会发现他没有按你指定的排序方式显示.,这是一个很难办的事.而且如果你用 rownum=2这样的语句来输出第二行的话也是行不通的. 六、 最恶心的一点是Oracle对null的判断变态到极点.如果你说某个变量 aa=null它是判断不出来的.尽管aa的确是空.即使在选择条件里也是判断不出来的.不知道为什么,只好用nvl()这个函数来判断了.在条件之外可 以用 aa is null 来判断.

六补充一点.就是在写存储过程时要注意参数名不能与数据库 字段名相同.否则Oracle会把这个参数名看成是字段名的,即使你用表的别名区分也不行.所以起参数名的时候一定要注意这点了.

分享到:
评论

相关推荐

    oracle使用管理笔记(一些经验的总结)

    17.oracle数据完整性 36 18.oracle 序列(sequence) 39 19.oracle 索引 40 20.oracle管理权限和角色 42 21.PL/SQL 47 (1)存储过程简单版本 47 (2)存储过程升级版本 49 (3)函数 50 (4)包 50 (5)触发器 51 PL/SQL语法...

    oracle函数大全.doc

    将字符数据类型转换为ROWID类型 SQL&gt; select rowid,rowidtochar(rowid),ename from scott.emp; ROWID ROWIDTOCHAR(ROWID) ENAME ------------------ ------------------ ---------- AAAAfKAACAAAAEqAAA ...

    MYSQL,SQLSERVER,ORACLE常用的函数

    SQL&gt; select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual; TO_CHA ------ 199910 37.LAST_DAY 返回日期的最后一天 SQL&gt; select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate...

    Oracle_Database_11g完全参考手册.part3/3

    11.1.1 数据类型的自动转换 11.1.2 关于自动转换的注意事项 11.2 特殊的转换函数 11.3 变换函数 11.3.1 TRANSLATE 11.3.2 DECODE 11.4 小结 第12章 分组函数 12.1 groupby和having的用法 12.1.1 添加一个orderby ...

    Oracle_Database_11g完全参考手册.part2/3

    11.1.1 数据类型的自动转换 11.1.2 关于自动转换的注意事项 11.2 特殊的转换函数 11.3 变换函数 11.3.1 TRANSLATE 11.3.2 DECODE 11.4 小结 第12章 分组函数 12.1 groupby和having的用法 12.1.1 添加一个orderby ...

    Oracle8i_9i数据库基础

    §1.7 ORACLE数据类型 38 §1.8 SQL 语句基础 44 §1.8.1 SQL语句所用符号 44 §1.8.2 简单select 查询 45 §1.9 伪列及伪表 46 §1.10 使用SQL Worksheet工作 46 第二章 查询基础 50 §2.1 SELECT语句 50 §2.2 SQL...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    最全的oracle常用命令大全.txt

    MODIFY (列名 数据类型) 例:将test表中的Count列宽度加长为10个字符 sql&gt;alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和...

    Oracle事例

    create snapshot snapshot_to_study as select * from TABLE_NAME@to_study; 创建角色 create role aa identified by aaa; 授权 grant create snapshot,alter snapshot to aaa; grant aaa to emp; create ...

    Oracle数据库恢复工具Oracle Database Unloader(ODU)3.09

    支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+) 导出的数据格式包括纯文本和DMP文件两种。以纯...

    oracle-ascii-unload:Oracle Pro * C程序将数据卸载到ASCII平面文件

    它本身支持DATE,NUMBER,CHAR,VARCHAR2类型的列。 它当前不直接支持TIMESTAMP(通过select * from... ),但是它将支持TIMESTAMP列转换为类似这样的字符串: select to_char(ts_column, 'YYYY-MM-DD HH24:MI:...

    orcale常用命令

    MODIFY (列名 数据类型) 例:将test表中的Count列宽度加长为10个字符 sql&gt;alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和...

    Oracle9i的init.ora参数中文说明

    说明: 与 NLS_TIME_FORMAT 相似, 只不过它设置的是 TIMESTAMP 数据类型的默认值, 该数据类型既存储YEAR, MONTH 和 DAY 这几个日期值, 也存储 HOUR, MINUTE 和 SECOND 这几个时间值。 语法: TIMESTAMP '1997-01-31 ...

    oracle数据库修复

    支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+) 全面支持LOB字段: 支持CLOB、NCLOB和BLOB CLOB...

    赤兔Oracle数据库恢复软件 v11.6.zip

    5.支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i ) , BINARY FLOAT, BINARY DOUBLE (10g ) 6.全面支持LOB字段:支持CLOB、NCLOB和BLOBCLOB...

    oracle知识简介

    RAW:这是一种变长的二进制数据类型,采用这种数据类型存储的数据不会发生字符集的转换,可以把它看做是由数据库存储的信息的二进制字节串。最多可以存储2000字节 LONG RAW 能存储2GB的二进制信息,建议所有开发中都...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    10.3 使用TO_CHAR、TO_NUMBER 和TO_DATE转换函数 361 10.4 在SELECT语句中应用条件表达式 368 10.4.1 嵌套函数 368 10.4.2 条件函数 369 10.5 本章知识点回顾 375 10.6 自测题 376 10.7 自测题答案 378 第11...

Global site tag (gtag.js) - Google Analytics