【问题标题】:SQL Case statement for checking a particular date format用于检查特定日期格式的 SQL Case 语句
【发布时间】:2021-01-31 13:50:16
【问题描述】:

我有一个包含不同日期 col_date 的 Oracle 表,我想根据以下条件更新我的表:

  1. 如果 col_date 列的日期采用“MM/dd/yy”格式,则将日期更改为 oracle 日期格式,如“dd-MMM-yyyy”,否则更新为 null。

尝试以下情况:

select field1,
       field2,
       case
         when Check_Date_Input like to_date(Check_Date_Input,'MM/dd/yy')
           then date_format(to_date(Check_Date_Input, 'MM/dd/yy'), 'dd-MMM-yyyy')
         else null
       end as check_date
  from Table

此查询在所有情况下都将日期字段更新为空。请指导写正确的case条件。

【问题讨论】:

  • Oracle DATE 数据类型没有格式。格式仅在使用内置函数 TO_CHAR 或 TO_DATE 转换 DATE 时使用。甲骨文不是 MySQL。您应该从问题中删除“mysql”标签。请注意,Oracle DATE 数据类型同时包含日期和时间。 LIKE 运算符用于 CHAR 或 VARCHAR2 数据类型,不适用于 DATE 数据类型。
  • 这正是你所写的。你的 else 条件告诉返回 null 以防格式不匹配。 2. 请只标记您正在使用的一个数据库,目前它似乎混淆了。
  • 删除了标签,但我的 sql 不适用于任何格式,它只更新为空值。你能帮我修复查询吗
  • 很好..是否可以从表格中提供一些混合格式的示例数据以及您如何看到预期的输出。
  • check_date_input 的数据类型是什么?如果它是 varchar2 并且你有 mm/dd/yydd/mm/yy 的混合,那么你真的有麻烦了,因为当 dd 小于 13 时,无法判断它是哪一个。

标签: sql string oracle datetime case


【解决方案1】:

Oracle 日期没有特定格式。它以某种内部格式存储,您真的不需要担心。另一方面,当显示一个日期时,Oracle 会构建一个日期的字符串表示,您可以在输出中看到它。

默认情况下,格式由nls参数nls_date_format定义。您可以通过更改会话中的数据库设置或在查询中明确使用to_char() 将其更改为您喜欢的任何内容。

说你想要格式dd-mmm-yyyy,那么你可以这样做:

alter session set nls_date_format = 'dd-mm-yyyy';

然后运行您的查询:

select field1, field2, check_date_input from mytable

nls 设置在会话的整个生命周期内保持有效,因此每个 date 列都将以该格式显示在结果集中。

或者,您可以在查询中使用to_char()

select field1, field2, to_char(check_date_input, 'dd-mm-yyyy') as check_date_input from mytable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多