Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 日期格式转换的大小写表达式_Sql_Oracle - Fatal编程技术网

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

Sql 日期格式转换的大小写表达式,sql,oracle,Sql,Oracle,我有一个Entrydate列,它以下面的日期格式来自源代码 YYYY-MM-DD HH.MM.SS YYYY-MM-DD 它以YYYYMM格式加载到表中。我正在寻找处理这两个条件的case表达式 我正在使用下面的SQL SELECT CASE WHEN to_char(ENTRYDATE, 'YYYY-MM-DD HH.MM.SS') THEN to_char(ENTRYDATE, 'YYYYMM') to_char(ENTRYDAT

我有一个
Entrydate
列,它以下面的日期格式来自源代码

  • YYYY-MM-DD HH.MM.SS
  • YYYY-MM-DD
  • 它以
    YYYYMM
    格式加载到表中。我正在寻找处理这两个条件的case表达式

    我正在使用下面的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格式获取日期以验证输出表

    获得无效关系运算符的原因是函数
    TO_CHAR()
    不返回布尔值

    我的猜测是,你有表面上的日期值存储为
    CHAR
    VARCHAR
    ,你需要转换成某种格式。如果它们存储为
    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;
    
    (请注意,
    案例
    语句中还缺少一个
    结尾
    。)

    如果
    entrydate
    的值为其他格式,则上面将返回一个
    NULL


    希望这能有所帮助。

    为什么是
    案例?如果有两种不同的格式,则该值可能已经是字符串。因此:

    select replace(substr(ENTRYDATE, 7), '-', '')
    
    如果是
    date
    列,则只需执行以下操作:

    select to_char(ENTRYDATE, 'YYYYMM')
    

    EntryDate
    的数据类型是什么?这种用法表明它是一个字符串。日期没有格式,您要么将其存储为字符串(错误),要么客户将其显示为特定格式的字符串;但是提到两种不同的格式就没有什么意义了。它将有助于显示表结构(如果这实际上是插入的一部分,则包括源和目标)以及示例数据和预期结果,所有这些都是格式化文本。为什么要将日期作为数字加载到表中?这是自找麻烦。我使用CASE,因为我必须对其他字段执行更多的转换。是的,它是一种日期格式。但是,目标表格格式为“数字(6,0)”。当我使用to_char时,我得到了“数据类型不匹配”。@Raja,你到底为什么打算将日期值存储为数字?第一个查询应该有
    substr(ENTRYDATE,1,7)
    ?@谢谢你的输入,我使用了to_char函数来获得结果。在输出表上,我可以执行一个Cast函数来匹配我的结果。@Raja:你写了“是的,这是一种日期格式”。如果您使用的是
    DATE
    type,那么检测格式就没有意义(因为这不是存储在数据库中的内容)。如果您是说,这些数据是特定格式的日期,那么它是字符串类型(例如,
    VARCHAR2
    ),因此@GordonLinoff的答案可能是“不,它不是日期列”。