oracle中to_char、to_number、to_date精要讲解

简介:

注意:
1.在使用Oracle的to_date函数来做日期转换时,可能会直觉地采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
2.另要以24小时的形式显示出来要用HH24
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份

*****************************************************************************************************

Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型。

注意:所有格式化函数的第二个参数是用于转换的模板。
表 5-7. 格式化函数

函数
返回
描述
例子

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')

表 5-8. 用于 date/time 转换的模板

模板
描述

HH
一天的小时数 (01-12)

HH12
一天的小时数 (01-12)

HH24
一天的小时数 (00-23)

MI
分钟 (00-59)

SS
秒 (00-59)

SSSS
午夜后的秒 (0-86399)

AM or A.M. or PM or P.M.
正午标识(大写)

am or a.m. or pm or p.m.
正午标识(小写)

Y,YYY
带逗号的年(4 和更多位)

YYYY
年(4和更多位)

YYY
年的后三位

YY
年的后两位

Y
年的最后一位

BC or B.C. or AD or A.D.
年标识(大写)

bc or b.c. or ad or a.d.
年标识(小写)

MONTH
全长大写月份名(9字符)

Month
全长混合大小写月份名(9字符)

month
全长小写月份名(9字符)

MON
大写缩写月份名(3字符)

Mon
缩写混合大小写月份名(3字符)

mon
小写缩写月份名(3字符)

MM
月份 (01-12)

DAY
全长大写日期名(9字符)

Day
全长混合大小写日期名(9字符)

day
全长小写日期名(9字符)

DY
缩写大写日期名(3字符)

Dy
缩写混合大小写日期名(3字符)

dy
缩写小写日期名(3字符)

DDD
一年里的日子(001-366)

DD
一个月里的日子(01-31)

D
一周里的日子(1-7;SUN=1)

W
一个月里的周数

WW
一年里的周数

CC
世纪(2 位)

J
Julian 日期(自公元前4712年1月1日来的日期)

Q
季度

RM
罗马数字的月份(I-XII;I=JAN)-大写

rm
罗马数字的月份(I-XII;I=JAN)-小写

所有模板都都允许使用前缀和后缀修改器。模板里总是允许使用修改器。前缀 'FX' 只是一个全局修改器。

表 5-9. 用于日期/时间模板 to_char() 的后缀

后缀
描述
例子

FM
填充模式前缀
FMMonth

TH
大写顺序数后缀
DDTH

th
小写顺序数后缀
DDTH

FX
固定模式全局选项(见下面)
FX Month DD Day

SP
拼写模式(还未实现)
DDSP

用法须知:

  • 如果没有使用 FX 选项,to_timestamp 和 to_date 忽略空白。FX 必须做为模板里的第一个条目声明。
  • 反斜杠("\")必须用做双反斜杠("\\"),例如 '\\HH\\MI\\SS'。
  • 双引号('"')之间的字串被忽略并且不被分析。如果你想向输出写双引号,你必须在双引号前面放置一个双反斜杠('\\'),例如 '\\"YYYY Month\\"'。
  • to_char 支持不带前导双引号('"')的文本,但是在双引号之间的任何字串会被迅速处理并且还保证不会被当作模板关键字解释(例如:'"Hello Year: "YYYY')。
表 5-10. 用于 to_char(numeric) 的模板

模板
描述

9
带有指定位数的值

0
前导零的值

. (句点)
小数

, (逗号)
分组(千)分隔符

PR
尖括号内负值

S
带负号的负值(使用本地化)

L
货币符号(使用本地化)

D
小数点(使用本地化)

G
分组分隔符(使用本地化)

MI
在指明的位置的负号(如果数字 < 0)

PL
在指明的位置的正号(如果数字 > 0)

SG
在指明的位置的正/负号

RN
罗马数字(输入在 1 和 3999 之间)

TH or th
转换成序数

V
移动 n 位(小数)(参阅注解)

EEEE
科学记数。现在不支持。

用法须知:

  • 使用 'SG','PL' 或 'MI' 的带符号字并不附着在数字上面;例如,to_char(-12, 'S9999') 生成 ' -12',而 to_char(-12, 'MI9999') 生成 '- 12'。Oracle 里的实现不允许在 9 前面使用 MI,而是要求 9 在 MI 前面。
  • PL,SG,和 TH 是 Postgres 扩展。
  • 9 表明一个与在 9 字串里面的一样的数字位数。如果没有可用的数字,那么使用一个空白(空格)。
  • TH 不转换小于零的值,也不转换小数。TH 是一个 Postgres 扩展。
  • V 方便地把输入值乘以 10^n,这里 n 是跟在 V 后面的数字。to_char 不支持把 V 与一个小数点绑在一起使用(例如. "99.9V99" 是不允许的)。
表 5-11. to_char 例子

输入
输出

to_char(now(),'Day, HH12:MI:SS')
'Tuesday , 05:39:18'

to_char(now(),'FMDay, HH12:MI:SS')
'Tuesday, 05:39:18'

to_char(-0.1,'99.99')
' -.10'

to_char(-0.1,'FM9.99')
'-.1'

to_char(0.1,'0.9')
' 0.1'

to_char(12,'9990999.9')
' 0012.0'

to_char(12,'FM9990999.9')
'0012'

to_char(485,'999')
' 485'

to_char(-485,'999')
'-485'

to_char(485,'9 9 9')
' 4 8 5'

to_char(1485,'9,999')
' 1,485'

to_char(1485,'9G999')
' 1 485'

to_char(148.5,'999.999')
' 148.500'

to_char(148.5,'999D999')
' 148,500'

to_char(3148.5,'9G999D999')
' 3 148,500'

to_char(-485,'999S')
'485-'

to_char(-485,'999MI')
'485-'

to_char(485,'999MI')
'485'

to_char(485,'PL999')
'+485'

to_char(485,'SG999')
'+485'

to_char(-485,'SG999')
'-485'

to_char(-485,'9SG99')
'4-85'

to_char(-485,'999PR')
'<485>'

to_char(485,'L999')
'DM 485

to_char(485,'RN')
' CDLXXXV'

to_char(485,'FMRN')
'CDLXXXV'

to_char(5.2,'FMRN')
V

to_char(482,'999th')
' 482nd'

to_char(485, '"Good number:"999')
'Good number: 485'

to_char(485.8,'"Pre-decimal:"999" Post-decimal:" .999')
'Pre-decimal: 485 Post-decimal: .800'

to_char(12,'99V999')
' 12000'

to_char(12.4,'99V999')
' 12400'

to_char(12.45, '99V9')
' 125'




本文转自hcy's workbench博客园博客,原文链接:http://www.cnblogs.com/alterhu/archive/2012/03/06/2382050.html ,如需转载请自行联系原作者。
目录
相关文章
|
Oracle 关系型数据库
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
323 0
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之使用JDBC方式读取Oracle的number类型时,通过什么方式进行映射
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
359 0
实时计算 Flink版产品使用合集之使用JDBC方式读取Oracle的number类型时,通过什么方式进行映射
|
Oracle 关系型数据库 数据库
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
269 1
|
机器学习/深度学习 人工智能 Oracle
在Oracle中,TO_CHAR()、TO_NUMBER()和TO_DATE()函数的使用方法以及作用
在Oracle中,TO_CHAR()、TO_NUMBER()和TO_DATE()函数的使用方法以及作用
1042 0
Zp
|
SQL Oracle 关系型数据库
Oracle 通过sql to_date()和 to_char() 转化日期格式
Oracle 通过sql to_date()和 to_char() 转化日期格式
Zp
584 0
Oracle 通过sql to_date()和 to_char() 转化日期格式
|
SQL Oracle 关系型数据库
Oracle-分析函数之排序后顺序号row_number()
Oracle-分析函数之排序后顺序号row_number()
197 0
|
SQL 移动开发 Oracle
Oracle中rownum和row_number()
Oracle中rownum和row_number()
924 0
|
存储 关系型数据库 MySQL
面试时被这样一个问:”存储MD5值应该用VARCHAR还是用CHAR?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。
259 0
|
8月前
|
SQL
【YashanDB 知识库】通过触发器复制 varchar(4000 char) 列的数据导致乱码
**问题简介:** 客户在使用触发器将表 A 中 varchar(4000 char) 列的数据复制到表 B 时,发现表 B 中的数据出现乱码且与表 A 不一致。此问题影响所有 YashanDB 版本,原因是 YashanDB 在处理触发器场景下的大长度 varchar 数据复制时存在机制错误。为避免该问题,建议将列长度修改为 varchar(2000 char) 或更小。数据正确性无法保证,需谨慎处理。 **验证方法:** 可通过创建表 A 和 B 及相应触发器进行测试。
【YashanDB 知识库】通过触发器复制 varchar(4000 char) 列的数据导致乱码
|
7月前
|
SQL
【YashanDB知识库】通过触发器复制varchar(4000 char)列的数据导致乱码
【YashanDB知识库】通过触发器复制varchar(4000 char)列的数据导致乱码

推荐镜像

更多