【问题标题】:ORA-01858 Error MessageORA-01858 错误消息
【发布时间】:2015-04-06 05:13:20
【问题描述】:

我有一个关于日期格式错误的问题。所以我有这个查询

SELECT TO_DATE (PS.PROJECT_START_DT, 'MM/DD/YYYY')

并给我ORA-01858:在需要数字的地方发现了一个非数字字符

我的表结构是这样的

PROJECT_START_DT PROJECT_END_DT JOB_NAME
2/5/2015         4/2/2015       W-IGG
2/18/2015        3/19/2015      W14056
2/5/2015         3/31/2015      W14013

请帮我解决日期格式的问题

【问题讨论】:

  • project_start_dtdate 吗?还是varchar2?如果是date,顾名思义,为什么叫to_date?您只是想截断时间组件吗?
  • 是的,这是一个日期......
  • 我的意图只是通过选择语句显示日期,我将进一步使用它来处理一些数据
  • 您要选择date吗?或者您想选择特定格式的varchar2?如果要选择date,只需选择date
  • 如果PROJECT_START_DT 应用to_date() 完全没用。正如to_date() 期望的VARCHAR 参数Oracle 将首先将您的日期转换为varchar(使用您的NLS 设置定义的默认格式),然后to_date() 将该varchar 转换回日期(开始与)。

标签: sql oracle date format


【解决方案1】:

选择 TO_DATE(PS.PROJECT_START_DT,'MM/DD/YYYY')

在 DATE 列上使用 TO_DATE 是没有意义的。您需要 TO_CHAR 使用适当的 FORMAT MODEL 以所需的格式显示。

SQL> SELECT to_date(SYSDATE, 'mm/dd/yyyy') FROM dual;
SELECT to_date(SYSDATE, 'mm/dd/yyyy') FROM dual
               *
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected


SQL>
SQL> SELECT to_char(SYSDATE, 'mm/dd/yyyy') FROM dual;

TO_CHAR(SY
----------
02/06/2015

SQL>

DATE 数据类型同时具有日期和时间元素,

SQL> SELECT to_char(SYSDATE, 'mm/dd/yyyy hh24:mi:ss') dt_tm FROM dual;

DT_TM
-------------------
02/06/2015 11:28:32

SQL>

如果您想在任何日期操作中使用 DATE 值,那么您根本不必将其转换为任何内容,只需将 DATE 值直接用于日期操作即可。

更新应 OP 关于此处查询的请求http://pastie.org/9891465

在该查询中,您不必在子查询中使用TO_CHAR。仅在主选择中使用TO_CHAR,因为这将显示值。子查询中的 start_dateend_dt 是外部查询的 INPUT,应保留为 DATE 值,无需转换 将其转换为 字符串

SELECT LEVEL WEEK_NUM_INCR,
  TO_CHAR (start_date + (LEVEL - 1) * 7, 'WW') WEEK_POSITION
  /* WEEK POSITION FOR THE WHOLE YEAR */
  ,
  TO_CHAR (start_date + (LEVEL - 1) * 7, 'MM/DD/YYYY') START_WEEK_DATE,
  TO_CHAR (start_date + (LEVEL) * 7, 'MM/DD/YYYY') END_WEEK_DATE
FROM
  (SELECT PS.PROJECT_START_DT start_date,
    PS.PROJECT_END_DT end_date
  FROM PROJECT_SPAN PS
  WHERE PS.JOB_NAME = 'W-IGG'
  )
  CONNECT BY start_date + (LEVEL - 1) * 7 < end_date;

【讨论】:

  • lalit 如果我使用 TO_CHAR,它会在这个查询中出现问题 sn-p pastie.org/9891465
  • 在该查询中,不需要在子查询中使用TO_CHAR,只需选择start_date,end_dt并在主选择中使用to_char。让我更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多