我有一个Entrydate
列,其来源来自以下日期格式
它以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格式的日期以验证输出表。
答案 0 :(得分:3)
得到invalid relational operator
的原因是函数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;
(请注意,您的END
语句中也缺少CASE
。)
如果NULL
的值采用其他格式,则以上内容将返回entrydate
。
希望这会有所帮助。
答案 1 :(得分:0)
为什么要使用case
?如果您使用两种不同的格式,则该值可能已经是字符串。所以:
select replace(substr(ENTRYDATE, 7), '-', '')
如果它是date
列,那么您只需这样做:
select to_char(ENTRYDATE, 'YYYYMM')