【发布时间】:2016-09-22 03:14:28
【问题描述】:
我看过与此类似的帖子,但我无法解决我的问题。
我正在尝试查询具有 VARCHAR2 数据类型的列(“VALUE”)的表。
此列中的行混合了数字值和日期值(我不知道为什么将日期存储为 VARCHAR2)。
我只需要日期,我已经用 LIKE 函数过滤掉了行。
SELECT
PARENTID,
NAME,
VALUE
FROM TIMINGEVENT
WHERE NAME like 'last%'
;
现在该列只有日期,我需要从 VARCHAR2 转换为日期。
PARENTID ++ NAME ++ VALUE
1701480 ++ lastCycle1 ++
1701480 ++ lastCycle2 ++
1701480 ++ lastCycle3 ++ 20150901092520 AM
1701480 ++ lastCycle4 ++ 20150901092834 AM
1701480 ++ lastCycle5 ++ 20150901085047 AM
我尝试使用 TO_DATE 导致以下错误:
ORA-01858:在需要数字的地方发现了一个非数字字符
我正在使用 Oracle 11g SQL Developer,并且日期格式的 NLS 首选项设置为 DD-MON-RR。
我在另一篇文章中找到了以下方法,但是当我使用它时会引发以下错误?
SELECT
PARENTID,
NAME,
VALUE,
TO_CHAR(TO_DATE(VALUE, 'MM/DD/YYYY'), 'MM/DD/YYYY') AS "test"
FROM TIMINGEVENT
WHERE NAME like 'last%'
;
ORA-01843: not a valid month
01843. 00000 - "not a valid month"
【问题讨论】:
-
您尝试使用 to_date 的目的是什么?您是否提供了格式掩码,或依赖 NLS 设置?
-
说实话,两者都是。我旋转了几个面具,也依赖于设置。我不断收到各种错误,包括:ORA-01861:文字与格式字符串不匹配。
-
我用另一个例子更新了我上面的问题。请帮忙,谢谢。
-
该格式掩码与您的 varchar2 字符串不匹配。你为什么不使用 Aleksej 的答案?
标签: sql date oracle11g to-date varchar2