甲骨文 - 检查空日期
问题描述:
我试图写时Date
为空的情况下,但我不断收到此错误时不一致的数据类型错误:甲骨文 - 检查空日期
ORA-00932: inconsistent datatypes: expected CHAR got DATE
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
的代码非常简单。是否有不同的方式比作Date
当检查null
?
case
when cr.COMPLETED_DATE is null then '--'
else cr.COMPLETED_DATE
end completed_date,
答
这里的问题是与返回值从case when
声明
cr.COMPLETED_DATE is null then '--'
回报string datatype
和
else cr.COMPLETED_DATE
返回date datatype
,因此错误
inconsistent datatypes: expected CHAR got DATE
一个解决是改变seco的数据类型第二壳体条件为char
case
when cr.COMPLETED_DATE is null then '--'
else to_char(cr.COMPLETED_DATE, 'dd-mm-yyyy')
end completed_date,
或使用像 '1900-01-01
' 的日期时的日期是null
像
case
when cr.COMPLETED_DATE is null then Date '1900-01-01'
else cr.COMPLETED_DATE
end completed_date,
答
您的case表达式的两个分支获得不同的数据类型。如果列是空你提供一个字符串,'--'
。如果它不是null,那么你正在使用原始日期。这是错误信息告诉你的。
如果你想空的情况下使用字符串,则非空的情况下也有可能产生一个字符串,所以你必须你的日期转换为字符串,使用合适的业态模式(不依赖上NLS设置),例如:
case
when cr.COMPLETED_DATE is null then '--'
else to_char(cr.COMPLETED_DATE, 'YYYY-MM-DD')
end completed_date,
快速演示的CTE:
with cr (completed_date) as (
select date '2016-09-23' from dual
union all select null from dual
)
select
case
when cr.COMPLETED_DATE is null then '--'
else to_char(cr.COMPLETED_DATE, 'YYYY-MM-DD')
end completed_date
from cr;
COMPLETED_
----------
2016-09-23
--
的情况下表达的结果是对于两行的字符串。
你可以做同样的事情
nvl(to_char(cr.COMPLETED_DATE, 'YYYY-MM-DD'), '--') completed_date,
但情况下更便于携带,往往更清晰。
有趣,MySQL使用ORA-XXXXX代码错误讯息?我认为这只是Oracle。还有什么其他的连接是有你的问题,Oracle数据库之间(从MySQL不同的产品,即使来自同一供应商)?我看到Oracle标签,是故意还是意外? – mathguy
'ORA-00932'显示其Oracle,更好地去除MySQL的标签 – Praveen
@praveen哦,我没有注意到它,那家伙说mysql的问题 –