我需要在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 *)的行
答案 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%'
;