【问题标题】:Oracle: missing right parenthesisOracle:缺少右括号
【发布时间】:2013-02-17 13:57:33
【问题描述】:

我有一个问题:

SELECT (column LIKE '%string%') AS bool FROM table

返回:

“缺少右括号”

为什么?

【问题讨论】:

  • 这个查询想要做什么?
  • Oracle 不支持布尔数据类型,因此您必须使用诸如“TRUE”、“FALSE”之类的字符串文字或 1、0 之类的数字。

标签: oracle sql-like


【解决方案1】:

由于LIKE 运算符,我们不能使用DECODE 函数。我猜以下内容虽然丑陋,但与您正在寻找的内容相匹配:

SELECT
    login,
    CASE 
        WHEN login LIKE 'admin' THEN 1
        ELSE 0
    END
FROM users;

或者,类似布尔值:

SELECT
    login,
    CASE 
        WHEN login LIKE 'admin' THEN 'TRUE'
        ELSE 'FALSE'
    END
FROM users;

如果您使用LIKE 运算符,您希望在“admin”字符串中使用一些% 通配符,否则一个简单的相等就足够了。

Fiddle

Documentation

【讨论】:

  • 现在返回:FROM 关键字未在预期的地方找到
  • 我们可以看看最终的查询吗?
  • 不带通配符的 LIKE 与 equals 相同。
  • 是的,但我认为他知道 LIKE 的使用是出于进一步的字符串操作,因此我没有更改它。
  • 终于使用了你的版本 :)
【解决方案2】:

你应该使用:

SELECT DECODE(login,'admin','TRUE','FALSE') as bool FROM users;

【讨论】:

  • 很好的解决方案,但不允许使用通配符。
【解决方案3】:

SQL 中没有布尔数据类型,Oracle 中也没有。

执行此操作的标准方法是使用 WHERE 子句:

select whatever 
from your_table
where column LIKE '%string%';

如果您真的想要一个列,则需要将字符串探针与 DECODE() 或 CASE() 结合使用。像这样……

select decode(instr(column, 'string'), 0, 'FALSE', 'TRUE') as bool
from your_table

...或者这个...

select case when column like '%string%' then 'TRUE' else 'FALSE' end as bool
from your_table

...或其他一些排列。

【讨论】:

    【解决方案4】:

    返回 1 - 找到的字符串,否则返回 0:

    SELECT LEAST(1,INSTR(login,'admin')) AS bool FROM users
    

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 2021-07-29
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多