2

我有一个查询:

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

它返回:

“缺少右括号”

为什么?

4

4 回答 4

2

由于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”字符串中使用一些通配符,否则一个简单的相等就足够了。

小提琴

文档

于 2013-02-17T14:02:33.150 回答
1

你应该使用:

SELECT DECODE(login,'admin','TRUE','FALSE') as bool FROM users;
于 2013-02-17T14:21:41.783 回答
1

官方在 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

...或其他一些排列。

于 2013-02-17T15:17:59.740 回答
0

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

SELECT LEAST(1,INSTR(login,'admin')) AS bool FROM users
于 2013-02-17T15:29:12.287 回答