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

时间:2011-09-30 06:35:31

标签: sql oracle datetime

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

select to_date(date_column,'YYYY-MM-DD') from table;

但我仍然无法做到。给我错误

  

ORA-01843:不是有效月份

14 个答案:

答案 0 :(得分:55)

使用

select to_char(date_column,'YYYY-MM-DD') from table;

答案 1 :(得分:13)

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

select to_date(date_column,'MM/DD/YYYY') from table;

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

如果您想一步完成转换,您可能需要:

select to_char(to_date(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD') from table;

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

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

答案 2 :(得分:5)

我假设您可以使用Oracle SQL Developer,您可以从here下载。

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

ALTER SESSION SET nls_date_format='yyyy-mm-dd';

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

SELECT * FROM emp_company WHERE JDate = '2014-02-25'

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

ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';

答案 3 :(得分:3)

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

SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table

答案 4 :(得分:3)

select to_date(to_char(ORDER_DATE,'YYYY/MM/DD')) 
from ORDERS;

这可能有所帮助,但最后你会得到一个字符串而不是日期。显然,  您的格式问题肯定会得到解决。

答案 5 :(得分:2)

这对我有用!您可以转换为您想要的数据类型日期或字符串

to_char(TO_DATE(TO_CHAR(end_date),'MM-DD-YYYY'),'YYYY-MM-DD') AS end_date

答案 6 :(得分:1)

根据评论,数据表中的数据类型是DATE。 所以你应该简单地使用: “从表中选择date_column;”

现在,如果您执行选择,您将获得一个日期数据类型,这应该是.xsd所需的。

依赖于文化的日期格式化应该在GUI中完成(大多数语言都有方便的方法),而不是在select语句中。

答案 7 :(得分:1)

基本上,Oracle中Date列中的数据可以以任何用户定义的格式存储或保留为默认格式。 这一切都取决于NLS参数。

当前格式可见:SELECT SYSDATE FROM DUAL;

如果您尝试插入记录并且插入语句不是这种格式,那么它将给出: ORA-01843:没有有效的月份错误。 所以首先在插入语句之前更改数据库日期格式(我假设你有大量加载的insert语句),然后执行insert script。

格式可以通过以下方式更改: ALTER SESSION SET nls_date_format ='mm / dd / yyyy hh24:mi:ss';

您也可以从SQL Developer GUI更改NLS设置,(工具>首选项>数据库> NLS)

参考:http://oracle.ittoolbox.com/groups/technical-functional/oracle-sql-l/how-to-view-current-date-format-1992815

答案 8 :(得分:1)

对于军事时间格式,

select TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mm:ss') from DUAL

--2018-07-10 15:07:15

如果您希望日期向下舍入到月,日,小时,分钟,可以尝试

SELECT TO_CHAR( SYSDATE, 'yyyy-mm-dd hh24:mi:ss') "full-date" --2018-07-11 10:40:26
, TO_CHAR( TRUNC(SYSDATE, 'year'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-year"-- 2018-01-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'month'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-month" -- 2018-07-01 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'day'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-Sunday" -- 2018-07-08 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'dd'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-day" -- 2018-07-11 00:00:00
, TO_CHAR( TRUNC(SYSDATE, 'hh'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-hour" -- 2018-07-11 10:00:00
, TO_CHAR( TRUNC(SYSDATE, 'mi'), 'yyyy-mm-dd hh24:mi:ss') "trunc-to-minute" -- 2018-07-11 10:40:00
from DUAL

对于格式文字,您可以在以下位置找到帮助 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions242.htm#SQLRF52037

答案 9 :(得分:0)

您可以通过:

select to_char(to_date(date_column, 'MM/DD/YYYY'), 'YYYY-MM-DD') from table

答案 10 :(得分:0)

最新答复,但对于.databse-date-type,以下行有效。

SELECT to_date(t.given_date,'DD/MM/RRRR') response_date FROM Table T

given_date的列类型为“日期”

答案 11 :(得分:-2)

使用

SELECT STR_TO_DATE(date_column,'%Y-%m-%d') from table;

也是gothrough

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

答案 12 :(得分:-2)

Map<String, Object> parameter = new HashMap<String, Object>();
parameter.put("de.mdsd.e4.rap.kdn.joggathon.webeditor.commandparameter.username", username);
parameter.put("de.mdsd.e4.rap.kdn.joggathon.webeditor.commandparameter.password", password);
ParameterizedCommand cmd = commandService.createCommand("command.dologin", parameter );

答案 13 :(得分:-2)

如果您需要更改列输出日期格式,请使用to_char