日期格式转换的大小写表达式

时间:2018-06-22 16:02:16

标签: sql oracle

我有一个Entrydate列,其来源来自以下日期格式

  1. YYYY-MM-DD HH.MM.SS
  2. YYYY-MM-DD

它以YYYYMM格式加载到表中。我正在寻找一个能处理这两种情况的案例表达。

我正在使用下面的SQL

SELECT 
    CASE 
       WHEN to_char(ENTRYDATE, 'YYYY-MM-DD HH.MM.SS') 
          THEN to_char(ENTRYDATE, 'YYYYMM')
       to_char(ENTRYDATE, 'YYYY-MM-DD') 
          THEN to_char(ENTRYDATE, 'YYYYMM')
FROM 
    TABLE;

但我收到此错误:

  

ORA-00920:无效的关系运算符

我将需要获取YYYYMM格式的日期以验证输出表。

2 个答案:

答案 0 :(得分:3)

得到invalid relational operator的原因是函数TO_CHAR()没有返回布尔值。

我的猜测是,您似乎将日期值存储为CHARVARCHAR,并且需要转换为某种格式。如果将它们存储为DATE值,那么您应该没有太多工作要做。但是假设CHAR / VARCHAR / VARCHAR2

SELECT CASE WHEN REGEXP_LIKE(entrydate, '^\d{4}-\d{2}-\d{2}( \d{2}\.\d{2}\.\d{2})$')
         THEN REGEXP_REPLACE(entrydate, '^(\d{4})-(\d{2}).*$', '\1\2')
       END AS yyyymm_date
  FROM table;

(请注意,您的END语句中也缺少CASE。)

如果NULL的值采用其他格式,则以上内容将返回entrydate

希望这会有所帮助。

答案 1 :(得分:0)

为什么要使用case?如果您使用两种不同的格式,则该值可能已经是字符串。所以:

select replace(substr(ENTRYDATE, 7), '-', '')

如果它是date列,那么您只需这样做:

select to_char(ENTRYDATE, 'YYYYMM')