如何转换select中函数返回的布尔值

时间:2014-04-25 10:04:16

标签: sql oracle

我有下一个查询,但不起作用:

SELECT case BasePak.SomeFunction(333,4,5555) when true then 1 else 0 end 
               from dual

BasePak.SomeFunction(333,4,5555)返回布尔值。如何将结果(true,false)转换为数字或字符串?

我尝试过投射功能但没有成功。

有没有办法将布尔值转换为int或string?

2 个答案:

答案 0 :(得分:1)

SQL没有布尔数据类型,但PL / SQL有。在PL / SQL中,您有更多选择。你可以:

  • 编写函数,这样它们就不会返回布尔值,而是返回你需要的类型。
  • 如果你不能编辑这些函数,你可以编写一个包装函数来进行转换
  • 或者你可以直接使用这样的代码:

    string_var := CASE
    WHEN  boolean_var
    THEN  'True'
    WHEN  NOT boolean_var  -- or ELSE, depending on what you want
    THEN  'False'
    END;
    

在您的情况下,我要么更改原始函数,要么编写包装函数并直接从SQL代码中使用它。

答案 1 :(得分:-1)

据我所知,SQL并不包含布尔数据类型。 Bit通常用于表示true(1)或false(0)。你确定你的函数没有返回NULL值,因为这需要以不同的方式处理

请改为尝试:

SELECT case when BasePak.SomeFunction(333,4,5555) = 1 then 'true' else 'False' end 
from dual