【问题标题】:How to convert boolean value which returned by function in select [duplicate]如何转换选择中函数返回的布尔值[重复]
【发布时间】:2014-06-10 23:36:02
【问题描述】:

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

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

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

我尝试了强制转换功能,但没有成功。

有没有办法将布尔值转换为整数或字符串?

【问题讨论】:

  • 你想转换成什么字符串?
  • 类似于 SELECT case BasePak.SomeFunction(333,4,5555) 当 1 然后 "1" 否则 "0" 从双结束
  • 如果你使用双引号,那么它是一个标识符@Arnab,即一个表/列等。对字符串使用单引号,虽然这些是数字,所以根本没有引号。

标签: sql oracle


【解决方案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 代码中使用它。

【讨论】:

    【解决方案2】:

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

    试试这个:

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

    【讨论】:

    • 如果函数已经返回一个数字那么就不需要 CASE 语句...
    • 您的建议与发布的原始示例查询没有显着差异,作者说这不起作用。
    猜你喜欢
    • 2018-01-24
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多