【问题标题】:Getting a date format error while executing执行时出现日期格式错误
【发布时间】:2023-01-31 01:33:02
【问题描述】:

ORA-01840: 输入值对于日期格式来说不够长 01840. 00000 - “输入值对于日期格式来说不够长” *原因:
*行动:

SELECT TO_DATE (
          TO_CHAR (TO_DATE (attribute39, 'MM/DD/YYYY'), 'DD/MM/YYYY'),
          'DD/MM/YYYY') AS "PO Valid To Date"
  FROM table;

想要无错误地执行查询, 属性 39 是 mm/dd/yyyy 和 varchar(250) 中的日期格式

【问题讨论】:

  • MySQL 数据库如何产生 Oracle 错误消息?您想让我们猜测哪个查询失败了,还是将其添加到您的问题中?
  • 您在 ATTRIBUTE39 中有哪些值?您发布的代码表明 ATTRIBUTE39 包含字符串(VARCHAR2 数据类型也是如此),因为您正在尝试将其转换为 DATE,然后返回字符串(使用 TO_CHAR),然后再次转换为日期(使用 TO_DATE)。为什么?也许你应该解释你有什么(源数据)和期望的结果,因为该代码是错误的.

标签: sql oracle date


【解决方案1】:

TO_DATE 支持“DEFAULT return_value ON CONVERSION ERROR”,如果您在日期格式前加上“FX”,您将能够检测到 attribute39 不完全符合您的期望的行:

TO_DATE (attribute39, DEFAULT to_date('01/01/0001','dd/mm/yyyy') ON CONVERSION ERROR, 'FXMM/DD/YYYY')

如果您没有 NULL 作为 attribute39 的可能值,则可以将 NULL 设置为 DEFAULT,如果不选择您确定不在数据中的值,则更容易检测具有无效 attribute39 的行。

如果您的字符串中的年份只有两位数(表示从 1950 到 2049),您可能会得到 ORA-01840。

您还可以使用正则表达式运行查询以检测 attribute39 中的意外值。

【讨论】:

    【解决方案2】:
    select distinct(col1)     
    from Customer_flex_attr_value 
    where regexp_like (col1, '([0-9][0-9]|3[0-1])/([0-9]|[0-9]{2})/[0-9]{4}') 
    order by 1 desc;
    

    这会带来不同的日期格式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 2022-01-12
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多