Oracle DB TO_CHAR、TO_DATE、TO_NUMBER 函数

  • 使用TO_CHAR函数处理日期
TO_CHAR( date, 'format_model') 
格式样式具有以下特点:
• 必须放在单引号内
• 区分大小写
• 可以包含任何有效的日期格式元素
• 具有一个fm元素,用于删除填充的空格或隐藏前导零
• 与日期值之间用逗号分隔

TO_CHAR可以按照由format_model 指定的格式,将日期时间数据类型转换为数据类型为 VARCHAR2 的值。格式样式是一种字符文字,用于描述字符串中存储的日期时间的格式。
例如,字符串'11-Nov-1999' 的日期时间格式样式为'DD-Mon-YYYY' 。可以使用 TO_CHAR函数将日期从默认格式转换为指定的格式。
准则
• 格式样式是区分大小写的,而且必须放在单引号内。
• 格式样式可以包含任何有效的日期格式元素。但一定要使用逗号将日期值与格式样式 分隔开。
• 输出中的日和月名称会自动用空格填充。
• 要删除填充的空格或隐藏前导零,请使用填充模式fm元素。
hr@TEST0924> SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired FROM  employees WHERE  last_name = 'Higgins'; 

EMPLOYEE_ID MONTH
----------- -----
        205 06/02

  • 日期格式样式的元素

  • 日期格式样式的元素
使用下表中列出的格式可显示时间信息和文字,并将数字更改为拼写数字。

  • 使用TO_CHAR函数处理日期

hr@TEST0924> SELECT last_name,TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE FROM   employees;

LAST_NAME                 HIREDATE
------------------------- --------------------------------------------
OConnell                  21 June 2007
Grant                     13 January 2008
Whalen                    17 September 2003
...
107 rows selected.
示例中的SQL 语句显示所有雇员的姓氏和聘用日期。聘用日期显示为“17 June 1987”。
示例:
修改幻灯片中的示例,使其以“Seventeenth of June 1987 12:00:00 AM ”格式显示日期。
hr@TEST0924> SELECT  last_name, TO_CHAR(hire_date, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM') HIREDATE FROM    employees; 

LAST_NAME                 HIREDATE
------------------------- -----------------------------------------------------------------------
OConnell                  Twenty-First of June 2007 12:00:00 AM
Grant                     Thirteenth of January 2008 12:00:00 AM
Whalen                    Seventeenth of September 2003 12:00:00 AM
Hartstein                 Seventeenth of February 2004 12:00:00 AM
...
107 rows selected.
请注意,月份将遵循指定的格式样式;换句话说,首字母为大写,其它字母为小写。


  • 使用TO_CHAR函数处理数字
TO_CHAR( number,  'format_model')
下面列出了一些格式元素,可以将其与TO_CHAR函数配合 使用,以便将数字值显示为字符:


如果将数字值作为字符串进行处理,应使用TO_CHAR函数将那些数字转换为字符串数据 类型,该函数会将NUMBER 数据类型的值转换为VARCHAR2 数据类型的值。此方法在进 行连接时尤其有用。

数字格式元素
如果要将数字转换为字符数据类型,则可以使用下列格式元素:


  • 使用TO_CHAR函数处理数字
hr@TEST0924> SELECT TO_CHAR(salary, '$99,999.00') SALARY FROM employees WHERE  last_name = 'Ernst'; 

SALARY
-----------
  $6,000.00
• 如果数字的位数超过了格式样式中提供的位数,则Oracle Server  就会用由数字符号(#)  组成的字符串来替代整个数字。
• Oracle Server  会将存储的小数值舍入到格式样式中指定的小数位数。


  • 使用TO_NUMBER 和TO_DATE函数
• 使用TO_NUMBER 函数可将字符串转换为数字格式:
TO_NUMBER( char[, 'format_model']) 
• 使用TO_DATE函数可将字符串转换为日期格式:
TO_DATE( char[, 'format_model']) 
• 这两个函数都有一个fx限定符。此限定符指定必须与 TO_DATE函数的字符参数和日期格式样式完全匹配。

你可能需要将 字符串转换为数字或日期。要完成此任务,请使用TO_NUMBER 或 TO_DATE函数。可根据前面演示的格式元素来选择格式样式。
fx限定符指定必须与TO_DATE函数的字符参数和日期格式样式完全匹配:
• 字符参数中的标点和引号中的文本必须与格式样式的相应部分完全匹配(大小写 除外)。
• 字符参数不能有额外的空格。如果不使用fx,Oracle Server  就会忽略额外的空格。
• 字符参数中的数字数据必须与格式样式中的相应元素具有相同的位数。如果不使用 fx,字符参数中的数字就会省略前导零。

示例:
显示在2007 年6  月21日进入公司的所有雇员的姓名和聘用日期。在以下示例中,月份June   后和数字21前有两个空格。因为使用了fx限定符,要求完全匹配,所以系统无法 识别单词May 之后的空格。
hr@TEST0924> SELECT last_name, hire_date FROM   employees WHERE  hire_date = TO_DATE('June  21,  2007', 'fxMonth DD, YYYY'); 
SELECT last_name, hire_date FROM   employees WHERE  hire_date = TO_DATE('  June  21,  2007', 'fxMonth DD, YYYY')
                                                                        *
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected

要看到输出,请删除“May”和“24”之间的额外空格来更正查询。
hr@TEST0924> SELECT last_name, hire_date FROM   employees WHERE  hire_date = TO_DATE('June 21, 2007', 'fxMonth DD, YYYY'); 

LAST_NAME                 HIRE_DATE
------------------------- -------------------
OConnell                  2007-06-21:00:00:00
Sullivan                  2007-06-21:00:00:00
  • 将TO_CHAR和TO_DATE函数与RR日期格式结合使用
如果日期中的年份采用的格式为RR,并且只提供了最后2位年份,那么年份中的前两位数字就由两部分共同确定:提供年份的两位数字(指定年),数据库服务器上当前日期中年份的后2位数字(当年)。确定指定年世纪的规则如下:
 
● 规则1 如果指定年在00~49之间,并且当前年份在00~49之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为15,而当前年份为2007,那么指定年就是2015。
 
● 规则2 如果指定年在50~99之间,并且当前年份在00~49之间,那么指定年的世纪就等于当前年份的世纪减去1。因此,指定年的前两位数字等于当前年份的前两位数字减去1。例如,如果指定年为75,而当前年份为2007,那么指定年就是1975。
 
● 规则3 如果指定年在00~49之间,并且当前年份在50~99之间,那么指定年的世纪就等于当前年份的世纪加上1。因此,指定年的前两位数字等于当前年份的前两位数字加上1。例如,如果指定年为15,而当前年份为2075,那么指定年就是2115。
 
● 规则4 如果指定年在50~99之间,并且当前年份在50~99之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为55,而当前年份为2075,那么指定年就是2055。
 
如果日期中的年份使用RRRR格式,但是只提供了2位的年份,那么使用RR格式来解释年份。
下面看一个查询,它在解释15和75时使用了RR格式。下面这个查询假设当前年份为2013年:
sh@TEST0924>  SELECT TO_CHAR(TO_DATE('04-JUL-15', 'DD-MON-RR'), 'DD-MON-YYYY'),
  2  TO_CHAR(TO_DATE('04-JUL-75', 'DD-MON-RR'), 'DD-MON-YYYY')
  3  FROM dual;

TO_CHAR(TO_DATE('04- TO_CHAR(TO_DATE('04-
-------------------- --------------------
04-JUL-2015          04-JUL-1975
正如规则1和规则2解释的一样,15和75分别被解释为2015年和1975年。
 
下面这个查询假设当前年份为2075年:
sh@TEST0924> SELECT TO_CHAR(TO_DATE('04-JUL-15', 'DD-MON-RR'), 'DD-MON-YYYY'),
  2  TO_CHAR(TO_DATE('04-JUL-55', 'DD-MON-RR'), 'DD-MON-YYYY')
  3  FROM dual;

TO_CHAR(TO_DATE('04- TO_CHAR(TO_DATE('04-
-------------------- --------------------
04-JUL-2115          04-JUL-2055
正如规则3和规则4解释的一样,15和75分别被解释为2115年和2055年。


TO_CHAR和TO_DATE函数与RR
查找1990 年之前聘用的雇员时,可以使用RR格式。由于当前年份晚于1999,因此RR 格式将该日期的年份部分解释为在1950 到1999 年之间。
而如果使用下面的命令,则不会选中任何行,因为YY格式将该日期的年份部分解释为 当前世纪(2090) 。
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-yyyy') FROM   employees WHERE  TO_DATE(hire_date, 'DD-Mon-yy') < '01-Jan-1990'; 
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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中非常常用的函数,可以帮助用户在不同的数据类型之间进行换,同时也需要注意使用时需要指定正确的格式

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值