日期值为的Oracle案例语句不是有效的月份

日期值为的Oracle案例语句不是有效的月份,oracle,Oracle,我有下面的案例陈述,但我想补充案例陈述,其中END_DT为1/1/3000,分类为Open CASE WHEN x.END_dt IS NOT NULL OR REASON IS NOT NULL THEN 'Closed' ELSE 'Open' END AS Enrolled 我得到了以下结果,但在这种情况下,这应该被归类为“已注册”列下的“打开” 我试着添加到案例陈述中,但我得到了错误 一是数据类型不一致;预期日期获得号码 二-将“1/1/3000”添加到日期时-不是有效的月份 我们将

我有下面的案例陈述,但我想补充案例陈述,其中END_DT为1/1/3000,分类为Open

CASE WHEN x.END_dt IS NOT NULL OR REASON IS NOT NULL 
THEN 'Closed' ELSE 'Open' END AS Enrolled
我得到了以下结果,但在这种情况下,这应该被归类为“已注册”列下的“打开”

我试着添加到案例陈述中,但我得到了错误

一是数据类型不一致;预期日期获得号码 二-将“1/1/3000”添加到日期时-不是有效的月份

我们将不胜感激

桌子


感谢mathguy提醒我ANSI标准日期格式。我更改了示例,因此假设x.END_dt是日期数据类型:

  CASE
    WHEN x.END_dt = date '3000-01-01'
      THEN 'Open'
    WHEN x.END_dt IS NULL AND REASON IS NULL
      THEN 'Open'
    WHEN x.END_dt IS NOT NULL OR REASON IS NOT NULL
      THEN 'Closed'
    ELSE 'Unexpected x.END_dt value: ' || to_char(x.END_dt)
  END AS Enrolled

我还收紧了case语句以处理意外的END_dt值,并在它们自己的“WHEN”行上显式测试条件。我喜欢这样做,因为这样测试的目的是明确的,当通过调试器(比如Toad)时,很清楚测试的是哪个表达式,当客户不可避免地想要改变事情时,当他们在自己的线路上时,很容易移动线路或改变测试顺序。

感谢mathguy提醒我ANSI标准日期格式。我更改了示例,因此假设x.END_dt是日期数据类型:

  CASE
    WHEN x.END_dt = date '3000-01-01'
      THEN 'Open'
    WHEN x.END_dt IS NULL AND REASON IS NULL
      THEN 'Open'
    WHEN x.END_dt IS NOT NULL OR REASON IS NOT NULL
      THEN 'Closed'
    ELSE 'Unexpected x.END_dt value: ' || to_char(x.END_dt)
  END AS Enrolled

我还收紧了case语句以处理意外的END_dt值,并在它们自己的“WHEN”行上显式测试条件。我喜欢这样做,因为这样测试的目的是明确的,当通过调试器(比如Toad)时,很清楚测试的是哪个表达式,当客户不可避免地想要改变事情时,当他们在自己的线路上时,很容易移动一行或改变测试顺序。

为了避免任何对
NLS\U DATE\u格式的依赖,可以使用ANSI标准日期格式(Oracle支持):
当x.end\u dt=DATE'3000-01-01'然后…
。整个
案例
表达式可以这样编写:

CASE
  WHEN x.end_dt = date '3000-01-01' OR (x.end_dt IS NULL AND x.reason IS NULL)
    THEN 'Open'
  ELSE   'Closed'
END AS enrolled

为了避免对NLS_DATE_格式的依赖,可以使用ANSI标准日期格式(Oracle支持):
当x.end_dt=DATE“3000-01-01”时,然后…
。整个
案例
表达式可以这样编写:

CASE
  WHEN x.end_dt = date '3000-01-01' OR (x.end_dt IS NULL AND x.reason IS NULL)
    THEN 'Open'
  ELSE   'Closed'
END AS enrolled

请显示完整有效的sql语句请显示完整有效的sql语句我总是忘记ANSI标准日期,谢谢。我将更新上面的示例。当我更改为ANSI标准日期格式时,我得到一个错误——“文字与格式字符串不匹配”。”01-JAN-3000“工作正常,但我为什么要使用ANSI标准日期格式,以及如何修复错误?能否请您将查询中出现错误的部分张贴出来-与您所写的完全一致?ANSI标准日期格式不使用格式字符串,但是如果我看不到它,我就看不出你的代码有什么问题。我总是忘记ANSI标准日期,谢谢。我将更新上面的示例。当我更改为ANSI标准日期格式时,我得到一个错误——“文字与格式字符串不匹配”。”01-JAN-3000“工作正常,但我为什么要使用ANSI标准日期格式,以及如何修复错误?能否请您将查询中出现错误的部分张贴出来-与您所写的完全一致?ANSI标准日期格式不使用格式字符串,但如果我看不到它,我就看不出你的代码有什么问题。你能解释一下“意外的x.END_dt值:”| | to_char(x.END_dt)在做什么吗?谢谢@Toby它返回的消息末尾连接了END_dt值。只是为了展示一种处理异常的方法。实际上,您不会返回此内容,而是记录或通过电子邮件或其他方式返回。您能解释一下“意外的x.END_dt值:”| to_char(x.END_dt)在做什么吗?谢谢@Toby它返回的消息末尾连接了END_dt值。只是为了展示一种处理异常的方法。实际上,您不会返回此信息,而是记录或通过电子邮件或其他方式返回。