我在表中存储了MM/DD/YYYY
格式的日期列。我必须以YYYY-MM-DD
格式(即XSD日期格式)在另一个表中选择和存储相同的日期。但我无法做到。我正在使用此查询:
select to_date(date_column,'YYYY-MM-DD') from table;
但我仍然无法做到。给我错误
ORA-01843:不是有效月份
答案 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)
答案 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