【问题标题】:SQL ERROR ORA-01847: Day of month must be between 1 and last day of month ERRORSQL 错误 ORA-01847: 日期必须介于 1 和最后一天之间 错误
【发布时间】:2018-06-14 14:35:37
【问题描述】:

我正在尝试将 DDDYYYY varchar 字段转换为日期字段。但是,当我尝试将日期插入日期字段时,我收到以下错误消息:

SQL 错误 ORA-01847: 日期必须介于 1 和最后一天之间 错误

以下是我使用的 DDDYYYY 数据示例:

 3562015

下面是我为转换它而编写的代码:

select to_date(to_char(to_date(lpad('3562015', 7, 0), 'DDDYYYY'), 'MM/DD/YYYY'), 'MM/DD/YYYY') as converted_date 
from dual;

我做错了什么?提前致谢。

【问题讨论】:

  • DATE 值没有格式 - 因此您无需格式化 DATE 值即可将其插入到 DATE 列中。一个单一的to_date() 电话就足够了
  • 我收到一个错误...可能是因为我尝试插入的列是带有时区的时间戳。这些数据类型兼容吗?我以为他们是
  • selectinsert 都为我工作(Oracle 12.2,nls_date_format = DD-MON-RR,nls_date_language = ENGLISH,nls_timestamp_tz_format = DD-MON-RR HH24.MI.SSXFF TZR)。但正如其他人所提到的,您会从最里面的 to_date() 表达式中得到一个非常好的 date,因此您应该停在那里,而不是将该日期转换为字符串,然后将该字符串转换回日期。
  • 可能是因为我尝试插入的列是带有时区的时间戳 - 请发布不起作用的内容。
  • 我重置了我的 nls_date_format 并且现在一切似乎都正常......不知道发生了什么。我很抱歉。

标签: sql oracle


【解决方案1】:

我有点困惑。如果你想转换值,那么你只需要:

select to_date(lpad('3562015', 7, 0), 'DDDYYYY')

(这行得通)。

我不确定其余代码应该做什么。但是返回一个字符串来返回一个日期是没有用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多