尝试执行select语句时会返回错误。格式似乎正确。请指出我误解的地方。
SELECT to_date (CALL_DATE,'DD-MON-YYYY HH24:MI') AS DATET FROM XXXXXX
其中CALL_DATE
是VARCHAR2类型列,其中日期存储为12-Jan-2017 12:04
。
它让我回头
- 00000 - “不是有效月份”。
醇>
答案 0 :(得分:0)
如果数据库中的日期为response
,则您的查询应为
12-Jan-2017 12:04
而不是
SELECT to_date (CALL_DATE,'DD-Mon-YYYY HH24:MI') AS DATET FROM XXXXXX
答案 1 :(得分:0)
选择to_date(' 2017年1月12日12:04',' DD-MON-YYYY HH24:MI')作为DATET来自DUAL;
返回
12-JAN-17
如果CALL_DATE真的采用“2017年1月12日12:04'”的格式,那么不应该是函数调用的问题。
使用
SELECT to_date(RTRIM(LTRIM(CALL_DATE)),' DD-MON-YYYY HH24:MI')来自XXXXXX的数据集。
答案 2 :(得分:0)
如果您以这种方式使用to_date
,那么您依赖的是环境语言。
如果您使用'Jan'
,则假设您使用的语言可能将1月写为'Jan'
,因此您可能需要明确设置用于解释日期的语言。
例如,说我的语言是意大利语,所以'1月'写成'Gen'而不是'Jan';如果尝试查询,我会得到同样的错误:
SQL> SELECT to_date ('12-Jan-2017 12:04', 'DD-MON-YYYY HH24:MI') AS DATET
2 FROM DUAL;
SELECT to_date ('12-Jan-2017 12:04', 'DD-MON-YYYY HH24:MI') AS DATET
*
ERROR at line 1:
ORA-01843: not a valid month
如果我明确说出用于解释存储日期的语言,我有:
SQL> SELECT to_date ('12-Jan-2017 12:04', 'DD-MON-YYYY HH24:MI', 'NLS_DATE_LANGUAGE = English') AS DATET
2 FROM DUAL;
DATET
---------
12-GEN-17
答案 3 :(得分:0)
谢谢大家的帮助。问题是一些用户存储着日期。
答案 4 :(得分:0)
Select to_char(to_date(call_time,'dd-mon-yyyy hh:mi'),'dd-mon-yyyy hh:mi') from xxxx;