能否在Oracle SQL的CASE语句中使用CAST转换为INTEGER类型?
在Oracle SQL的CASE语句中使用CAST转换为INTEGER类型当然可行!
完全没问题,你可以轻松在CASE语句里用CAST函数把计算结果转换成INTEGER类型。先看你当前的语句:
CASE WHEN SV.END_DATE IS NOT NULL THEN SV.END_DATE - SV.START_DATE ELSE 0 END AS DAYDIFF
这里SV.END_DATE - SV.START_DATE得到的是两个日期之间的天数差,Oracle默认会返回NUMBER类型。如果需要明确转为INTEGER,有两种直观的写法:
- 方式一:给整个CASE表达式做类型转换(推荐,逻辑更清晰)
CAST( CASE WHEN SV.END_DATE IS NOT NULL THEN SV.END_DATE - SV.START_DATE ELSE 0 END AS INTEGER ) AS DAYDIFF
- 方式二:仅对计算分支的结果转换
CASE WHEN SV.END_DATE IS NOT NULL THEN CAST(SV.END_DATE - SV.START_DATE AS INTEGER) ELSE 0 END AS DAYDIFF
另外提个小细节:如果你的日期字段都是不带时间的纯日期类型,那SV.END_DATE - SV.START_DATE的结果本身就是整数,CAST只是帮你明确数据类型;如果日期带时间(比如TIMESTAMP),差值会有小数部分,CAST会直接截断小数(和TRUNC效果类似),要是需要四舍五入的话,可以先用ROUND处理再转。
内容的提问来源于stack exchange,提问作者Gavin
相关产品推荐
相关产品推荐

