【发布时间】:2013-02-17 13:57:33
【问题描述】:
我有一个问题:
SELECT (column LIKE '%string%') AS bool FROM table
返回:
“缺少右括号”
为什么?
【问题讨论】:
-
这个查询想要做什么?
-
Oracle 不支持布尔数据类型,因此您必须使用诸如“TRUE”、“FALSE”之类的字符串文字或 1、0 之类的数字。
我有一个问题:
SELECT (column LIKE '%string%') AS bool FROM table
返回:
“缺少右括号”
为什么?
【问题讨论】:
由于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”字符串中使用一些% 通配符,否则一个简单的相等就足够了。
【讨论】:
你应该使用:
SELECT DECODE(login,'admin','TRUE','FALSE') as bool FROM users;
【讨论】:
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
...或其他一些排列。
【讨论】:
返回 1 - 找到的字符串,否则返回 0:
SELECT LEAST(1,INSTR(login,'admin')) AS bool FROM users
【讨论】: