繁体   English   中英

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

[英]How to change the date format from MM/DD/YYYY to YYYY-MM-DD in PL/SQL?

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

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

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

ORA-01843 : 不是有效月份

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

这听起来像你弄错了方法。 如果您现有的数据采用 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 格式。

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

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

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

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';

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

SELECT TO_DATE(TO_CHAR(date_column, 'DD-MM-YYYY'), 'DD-MM-YYYY') from my_table
select to_date(to_char(ORDER_DATE,'YYYY/MM/DD')) 
from ORDERS;

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

对于军事时间格式,

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 中找到帮助

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

当前格式可以通过以下方式查看:SELECT SYSDATE FROM DUAL;

如果您尝试插入记录并且插入语句不是这种格式,那么它会给出:ORA-01843:无效月份错误。 因此,首先在插入语句之前更改数据库日期格式(我假设您有大量插入语句),然后执行插入脚本。

可以通过以下方式更改格式: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

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

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

您可以简单地通过以下方式做到这一点:

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

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

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

日期的文化相关格式应在 GUI 中完成(大多数语言都有方便的方法),而不是在选择语句中。

延迟回复但 for.databse-date-type 以下行有效。

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

given_date 的列类型是日期

SELECT TO_DATE(TO_CHAR(date_column,'MM/DD/YYYY'), 'YYYY-MM-DD')
FROM table;

如果您需要更改列输出日期格式,只需使用 to_char 这将为您提供一个字符串,而不是日期。

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

还要经历

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM