我有以下SQL case语句。指定SQL case语句的返回类型
select tracking_num,
case
when source_one is not null then source_one
else source_two
end source_value
from ...
source_one和source_two是双精度。如果我执行上面的SQL,那么返回的source_value列是int精度的。
一位同事建议在列名的开头添加ohd_。
select tracking_num,
case
when source_one is not null then source_one
else source_two
end ohd_source_value
from ...
这将返回正确的值(返回的列名为'source_value')。
ohd_前缀是oracle标准吗?我无法在任何地方找到文档。另外,是否有更好的方式来执行此转换?也许通过使用CAST关键字?
谢谢您的提前回复。
DB版本:Oracle数据库11g企业版发布11.2.0.3.0 - 64位
编辑:作为随访到我提到的ohd_前缀。事实证明,这被烘焙到我们的客户端作为一个解决oracle的bug#1312311。 OHD显然代表“Oracle Hack Double”。
你为什么不使用'COALESCE(source_one,source_two)'?如果Oracle因为您选择的列前缀BTW而改变其行为,我会感到惊讶! – 2013-05-13 17:50:52
+1给Tony;希望它是一个答案。从未听说过“哦”前缀,但它可能与任何客户端正在接收行有关。请注意,如果您只是运行“选择”,那么这些列并没有真正的“类型”。 – BellevueBob 2013-05-13 17:56:04
我不认为在case语句中混合两种列类型是不可能的。 oracle会隐式转换为varchar2。 – haki 2013-05-13 18:10:07