了解TO_CHAR以在oracle中转换日期

问题描述 投票:-2回答:3

我有一个想了解的Oracle数据问题。

所以下面是我执行的一些查询,在注释上是输出。

SELECT SYSDATE FROM DUAL; --19-DEC-17 
SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY') FROM DUAL; -- 19/12/2017
SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY') FROM DUAL; -- 12/19/2017

我的问题是,to_char方法期望第一个参数是哪种日期格式?我们需要通过默认的日期格式吗?

所以我也在下面的查询中尝试了此方法,这引发了错误。如果某些专家可以向我解释to_char的工作方式,那将是很好的。

SELECT TO_CHAR('19/12/2017','DD/MM/YYYY') FROM DUAL;

ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.
sql oracle to-char
3个回答
1
投票

在查询中,您正在使用的是字符串值。相反,如果要使用TO_CHAR()显示,则需要使用datetime类型的字符串。就您而言,“ 19/12/2017”是一个纯字符串。请使用TO_DATE()函数将其转换为日期类型。

SELECT TO_CHAR('19/12/2017','DD/MM/YYYY') FROM DUAL;  // error

Oracle Docs for TO_CHAR (datetime)报价:

TO_CHAR(datetime)转换日期时间或DATE的间隔值, 时间戳,带时区的时间戳或带本地时区的时间戳 数据类型转换为VARCHAR2数据类型的值,格式为 日期格式fmt。如果省略fmt,则日期将转换为 VARCHAR2值如下:

DATE值将转换为默认日期格式的值。

TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE的值转换为 值以默认时间戳格式显示。

TIMESTAMP WITH TIME ZONE的值会转换为默认值 带时区格式的时间戳。

类似地,函数TO_CHAR()也接受数字。

Oracle Docs for TO_CHAR (number)报价:

TO_CHAR(number)使用n将n转换为VARCHAR2数据类型的值。 可选数字格式fmt。值n可以是NUMBER类型, BINARY_FLOAT或BINARY_DOUBLE。如果省略fmt,则n被转换 恰好足以保持其有效值的VARCHAR2值 数字。


1
投票

如上所述,'19 / 12/2017'已经是一个字符串,因此不能与to_char一起使用。如果要进行测试,则需要先使用to_date('19 / 12/2017','DD / MM / YYYY')将'19 / 12/2017'转换为日期格式,然后才能使用to_char转换回字符格式。例如,to_char(to_date('19 / 12/2017','DD / MM / YYYY'),'Mon DD,YYYY')将返回'Dec 19,2017'。


0
投票

SELECT TO_CHAR('19/12/2017','DD/MM/YYYY') FROM DUAL;

没有道理。 '19 / 12/2017'是一个字符串,因此没有必要将其转换为另一个字符串(就像您使用的TO_CHAR一样),更不用说格式掩码了。

如果您在此语句中使用TO_DATE,这表示您要使用'dd / mm / yyyy'格式掩码将字符串'19 / 12/2017'转换为日期值,就可以了。

这就是您在邮件的第一部分中所做的。 SYSDATE是一个返回DATE数据类型值的函数,因此您将TO_CHAR应用于它以便以所需格式显示它。在这里查看格式模型:https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm

© www.soinside.com 2019 - 2024. All rights reserved.