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_timestampto_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,而是要求 9MI 前面。
  • PLSG,和 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'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle 的 TO_CHAR 函数可以将一个日期、数字或时间戳转换为字符串。TO_DATE 函数则可以将一个字符串转换为日期格式。 例如: TO_CHAR(SYSDATE, 'MM-DD-YYYY') 将当前系统日期转换为字符串,格式为月-日-年 TO_DATE('2022-12-25', 'YYYY-MM-DD') 将字符串 '2022-12-25' 转换为日期格式,格式为年-月-日。 ### 回答2: Oracle是一种强大的关系型数据库管理系统,其to_char和to_date是两个常用的函数。to_char用于将日期或数字转换为字符型数据,而to_date则用于将字符型数据转换为日期型数据。 to_char函数的用法如下: TO_CHAR(date, format) 其date表示需要转换的日期或数字,format是目标字符型数据的格式。format可以包括以下字符: - YYYY:四位数的年份 - MM:月份 - DD:日期 - HH:24小时制的小时数 - MI:分钟数 - SS:秒数 例如,将一个日期型数据转换为字符型数据并且以YYYY-MM-DD的格式输出,可以使用如下语句: SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL; to_date函数的用法如下: TO_DATE(char, format) 其char表示需要转换的字符型数据,format是目标日期型数据的格式。format可以包括与to_char函数相同的字符。 例如,将一个字符型数据转换为日期型数据并且以YYYY-MM-DD的格式输出,可以使用如下语句: SELECT TO_DATE('2021-07-01', 'YYYY-MM-DD') FROM DUAL; 需要注意的是,format的字符与输入的char必须完全匹配,否则该函数将会报错。 在实际的开发工作,to_char和to_date函数的应用非常广泛,可以用于数据的转换、格式化输出、时间计算等方面。因此,熟练掌握这两个函数的用法对于在Oracle数据库进行数据查询和处理非常重要。 ### 回答3: Oracle的to_char和to_date都是用于将数据类型转换的函数,但它们的用途和使用方法有所不同。 to_char函数用于将日期型、数值型等数据类型转换为字符串类型。to_char函数的语法为: to_char(待转换的值, 转换格式) 其,待转换的值可以是日期型、数值型或者其他数据类型,转换格式指定了转换后的字符串的格式,包括日期、时间、数值等。to_char函数可以将日期型按照指定的格式转换成字符串,例如将日期型转换成"YYYY-MM-DD"格式的字符串。 to_date函数则用于将字符串类型转换为日期类型。to_date函数的语法为: to_date(待转换的字符串, 转换格式) 其,待转换的字符串必须符合指定的转换格式,否则会出现转换错误。to_date函数可以将字符串类型按照指定的格式转换成日期型,例如将"2021-08-18"格式的字符串转换成日期型。 需要注意的是,to_char和to_date函数在转换时都需要指定转换格式,否则会使用默认格式进行转换,导致出现错误。对于to_char函数而言,如果不指定转换格式,则会默认采用"DD-MON-YY"格式进行转换。对于to_date函数而言,如果不指定转换格式,则会默认采用"DD-MON-YY"格式进行转换。 总的来说,to_char与to_dateOracle非常常用的函数,可以帮助用户在不同的数据类型之间进行转换,同时也需要注意使用时需要指定正确的转换格式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值