所以我得到了一条SQL语句。我的想法是,我想做一个不区分大小写的。我是这样做的:
SELECT
FilenameId AS id,
LOWER(CONVERT(BINARY(Filename.Name) USING utf8)) AS name
FROM Filename
WHERE name LIKE '%something%'
COLLATE utf8_general_ci这很好用,但是我的查询也会返回大小写转换后的名称。我想要做的是合成不敏感的名称并对其进行LIKE查询,但也返回未大小写转换的名称。
SELECT
FilenameId AS id,
Filename.Name AS name,
LOWER(CONVERT(BINARY(Filename.Name) USING utf8)) AS iname
FROM Filename
WHERE iname LIKE '%something%'
COLLATE utf8_general_ci然后...but愉快地拒绝了MySQL:
Unknown column 'iname' in 'where clause'我做错了什么?我在MySQL 5.5半成品上。
发布于 2013-03-28 19:04:32
我不知道您为什么会想出这个,但通常其他人很难让LIKE区分大小写,反之亦然。
简单地编写您的查询如下:
SELECT
FilenameId AS id,
Filename.Name AS name
FROM Filename
WHERE name LIKE '%something%'一般来说,你不能在WHERE子句中访问别名。要么把你的查询放到像Dhinakaran建议的子查询中,要么使用HAVING (如果你懒惰的话)。
区别是:WHERE是基于行的,HAVING在应用WHERE子句(和GROUP BY)后处理结果。
从
以下两条语句说明字符串比较不区分大小写,除非其中一个操作数是二进制字符串:
mysql> SELECT 'abc' LIKE 'ABC';
-> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
-> 0发布于 2013-03-28 18:49:07
创建子查询,然后将where ON子查询
Select * from (SELECT
FilenameId AS id,
Filename.Name AS name,
LOWER(CONVERT(BINARY(Filename.Name) USING utf8)) AS iname
FROM Filename ) temp
WHERE temp.iname LIKE '%something%'
COLLATE utf8_general_ci或
SELECT
FilenameId AS id,
Filename.Name AS name,
AS iname
FROM Filename
WHERE LOWER(CONVERT(BINARY(Filename.Name) USING utf8)) LIKE '%something%'
COLLATE utf8_general_cihttps://stackoverflow.com/questions/15679704
复制相似问题