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
列,它以下面的日期格式来自源代码
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的答案可能是“不,它不是日期列”。