如何在PL/SQL中将日期格式从MM/DD/YYYY更改为YYYY-MM-DD?

use*_*548 17 sql oracle datetime

我在表格中存在一个日期列MM/DD/YYYY格式.我必须以YYYY-MM-DD格式即XSD日期格式选择并将相同的日期存储在另一个表中.但我无法做到.我正在使用此查询:

select to_date(date_column,'YYYY-MM-DD') from table;
Run Code Online (Sandbox Code Playgroud)

但我仍然无法做到这一点.给我错误

ORA-01843:不是有效月份

Yah*_*hia 57

使用

select to_char(date_column,'YYYY-MM-DD') from table;
Run Code Online (Sandbox Code Playgroud)

  • 一个真正的DATE列没有任何格式!如果你希望日期是特定的格式,结果不再是DATE类型 - 它变成一个字符串...... XML包含(除了特殊的二进制情况)专门的字符串...你想要实现什么? (7认同)
  • 对不起,但你描述的是一个悖论...任何格式(无论是"YYYY-MM-DD"或"MM/DD/YYYY"还是其他)总是一个字符串(即VARCHAR2)和任何XML都是一个字符串(很少有特殊情况除外)... DATE数据类型本身没有任何格式!所以你所描述的只能是部分真实,而不是完全 - 从你的描述中我不可能找出真正的数据类型因此我不知道如何帮助:-( (4认同)
  • 这与你尝试过的不一样.它是to_ char,而不是to_date. (2认同)

Jon*_*eet 15

听起来你已经错了.如果您的现有数据是MM/DD/YYYY格式,那么您需要:

select to_date(date_column,'MM/DD/YYYY') from table;
Run Code Online (Sandbox Code Playgroud)

将现有数据转换为DATE值.(我确实想知道为什么他们没有存储为日期,说实话......)

如果要一步执行转换,您可能需要:

select to_char(to_date(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD') from table;
Run Code Online (Sandbox Code Playgroud)

换句话说,对于每一行,以MM/DD/YYYY格式解析它,然后将其重新格式化为YYYY-MM-DD格式.

(我仍然建议尝试将数据保持在"自然"类型中,而不是首先将其存储为文本.)


Jor*_*dez 6

我假设你可以使用Oracle SQL Developer,你可以从这里下载.

您可以定义要使用的日期格式:

ALTER SESSION SET nls_date_format='yyyy-mm-dd';
Run Code Online (Sandbox Code Playgroud)

有了这个,现在你可以执行这样的查询:

SELECT * FROM emp_company WHERE JDate = '2014-02-25'
Run Code Online (Sandbox Code Playgroud)

如果您想更具体,可以像这样定义日期格式:

ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';
Run Code Online (Sandbox Code Playgroud)


Pha*_*e01 5

要将DATE列转换为另一种格式,只需使用TO_CHAR()所需的格式,然后将其转换回类型DATE

SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table
Run Code Online (Sandbox Code Playgroud)