Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle:缺少右括号_Oracle_Sql Like - Fatal编程技术网

Oracle:缺少右括号

Oracle:缺少右括号,oracle,sql-like,Oracle,Sql Like,我有一个问题: SELECT (column LIKE '%string%') AS bool FROM table 它返回: 缺少右括号 为什么?由于LIKE运算符,我们无法使用解码功能。我猜下面这句话,虽然很难看,但与你想要的相符: SELECT login, CASE WHEN login LIKE 'admin' THEN 1 ELSE 0 END FROM users; 或者,对于类似布尔值: SELECT logi

我有一个问题:

SELECT (column LIKE '%string%') AS bool FROM table
它返回:

缺少右括号

为什么?

由于LIKE运算符,我们无法使用解码功能。我猜下面这句话,虽然很难看,但与你想要的相符:

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

由于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;
你应使用:

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

。。。或者其他一些排列。

官方说法,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

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

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

此查询试图做什么?Oracle不支持布尔数据类型,因此您必须使用字符串文字,如“真”、“假”或数字,如1、0。此查询试图做什么?Oracle不支持布尔数据类型,因此您必须使用字符串文字,如“真”、“假”或数字,如1,0.现在返回:FROM关键字not found where expected我们可以看到最终查询吗?没有通配符的LIKE与equals相同。是的,但是我假设他知道LIKE的使用是由进一步的字符串操作驱动的,因此我没有更改它。最终使用了您的版本:现在返回:FROM关键字not found where expected我们可以看到最终的查询吗?LIKE不带通配符与equals相同。是的,但是我假设他知道LIKE的使用是由进一步的字符串操作驱动的,因此我没有改变它。最终使用了你的版本:好的解决方案,但是whildcard是不允许的。好的解决方案,但是whildcard是不允许的。