区分大小写的SQL搜索

时间:2015-10-30 09:58:33

标签: oracle oracle-sqldeveloper

我需要在sql中以区分大小写的方式检索数据。

SELECT * from tab 
WHERE col1 LIKE LOWER('b%') OR col1 LIKE UPPER('b%') 
AND col2 LIKE LOWER('b%') OR col2 LIKE UPPER('b%');

这一行可以反复表中的所有行。但我只需要col1(B *或b *)和col2与(B *或b *)的行

4 个答案:

答案 0 :(得分:3)

这是您要编写的查询:

SELECT * 
FROM tab 
WHERE (col1 LIKE LOWER('b%') OR col1 LIKE UPPER('b%'))
AND (col2 LIKE LOWER('b%') OR col2 LIKE UPPER('b%'))

operator precedence而需要括号。

当然,你也可以写这个:

SELECT * 
FROM tab 
WHERE LOWER(col1) LIKE 'b%'
AND LOWER(col2) LIKE 'b%'

......并且可能在

上放置基于函数的索引
CREATE INDEX idx1 ON tab(LOWER(col1));
CREATE INDEX idx2 ON tab(LOWER(col2));

答案 1 :(得分:0)

试试这个:

SELECT * from tab 
WHERE UPPER(col1) LIKE UPPER('b%')  
AND UPPER(col2) LIKE UPPER('b%');

答案 2 :(得分:0)

您的代码也只能正常运行。你期待什么?

$u = $_POST;
if( isset($_POST['update']) ) {
    $output = 'table';
    $usr = "update table set one=?, two=?, three=? where id=?";

    $one=$_POST['one'];
    $two=$_POST['two'];
    $three=$_POST['three'];
    $id=$_POST['id'];

    $query=$db->prepare($usr);
    if( !$query->execute(array($one, $two, $three, $id)) ) {
        $db->error;
    } else {
        print "update successful";
    }
}

答案 3 :(得分:0)

另一种替代方式:

alter session set nls_comp = linguistic;
alter session set nls_sort = binary_ci;

SELECT *
FROM tab 
WHERE col1 LIKE 'b%'
    AND col2 LIKE 'b%'
;