省略以特定字符开头的结果
omit results starting with certain character
我正在尝试从 table 中检索姓名列表,其中姓氏不以 z 或 Z 使用 mysql 开头。我尝试将 substring 与 instr 结合起来来完成此操作。尝试以下:
SELECT DISTINCT SQL_CALC_FOUND_ROWS CONCAT(FName," ",SName)
FROM Names
WHERE SUBSTRING(
CONCAT(FName, ' ' ,SName),
INSTR(CONCAT(FName, ' ' ,SName), ' ') +1,
1)
<> 'z'
OR SUBSTRING(
CONCAT(FName, ' ' ,SName),
INSTR(CONCAT(FName, ' ' ,SName), ' ') +1,
1)
<> 'Z'
ORDER BY SName
我的尝试是返回以 z 作为姓氏首字母的结果。谁能解释为什么?或者如果有更好的方法来实现这个
这可以用 LIKE
大大缩短:
SELECT DISTINCT SQL_CALC_FOUND_ROWS CONCAT(FName," ",SName)
FROM Names
WHERE FName NOT LIKE 'z%' AND FName NOT LIKE 'Z%';
IIRC LIKE
区分大小写,因为 MySQL v5.6.x
我不会这样写
...WHERE LOWER(FName) NOT LIKE 'z%';
因为在列上应用函数会阻止 MySQL 在列上使用索引(如果存在的话)。
SELECT DISTINCT SQL_CALC_FOUND_ROWS CONCAT(FName," ",SName)
FROM Names
WHERE FName REGEXP '^[^z]';
我正在尝试从 table 中检索姓名列表,其中姓氏不以 z 或 Z 使用 mysql 开头。我尝试将 substring 与 instr 结合起来来完成此操作。尝试以下:
SELECT DISTINCT SQL_CALC_FOUND_ROWS CONCAT(FName," ",SName)
FROM Names
WHERE SUBSTRING(
CONCAT(FName, ' ' ,SName),
INSTR(CONCAT(FName, ' ' ,SName), ' ') +1,
1)
<> 'z'
OR SUBSTRING(
CONCAT(FName, ' ' ,SName),
INSTR(CONCAT(FName, ' ' ,SName), ' ') +1,
1)
<> 'Z'
ORDER BY SName
我的尝试是返回以 z 作为姓氏首字母的结果。谁能解释为什么?或者如果有更好的方法来实现这个
这可以用 LIKE
大大缩短:
SELECT DISTINCT SQL_CALC_FOUND_ROWS CONCAT(FName," ",SName)
FROM Names
WHERE FName NOT LIKE 'z%' AND FName NOT LIKE 'Z%';
IIRC LIKE
区分大小写,因为 MySQL v5.6.x
我不会这样写
...WHERE LOWER(FName) NOT LIKE 'z%';
因为在列上应用函数会阻止 MySQL 在列上使用索引(如果存在的话)。
SELECT DISTINCT SQL_CALC_FOUND_ROWS CONCAT(FName," ",SName)
FROM Names
WHERE FName REGEXP '^[^z]';