首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL魔术列“名称”和合成列

问MySQL魔术列“名称”和合成列
EN

Stack Overflow用户
提问于 2013-03-28 18:43:41
回答 2查看 225关注 0票数 0

所以我得到了一条SQL语句。我的想法是,我想做一个不区分大小写的。我是这样做的:

代码语言:javascript
复制
SELECT 
  FilenameId AS id,
  LOWER(CONVERT(BINARY(Filename.Name) USING utf8)) AS name
  FROM Filename
  WHERE name LIKE '%something%'
  COLLATE utf8_general_ci

这很好用,但是我的查询也会返回大小写转换后的名称。我想要做的是合成不敏感的名称并对其进行LIKE查询,但也返回未大小写转换的名称。

代码语言:javascript
复制
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:

代码语言:javascript
复制
  Unknown column 'iname' in 'where clause'

我做错了什么?我在MySQL 5.5半成品上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-28 19:04:32

我不知道您为什么会想出这个,但通常其他人很难让LIKE区分大小写,反之亦然。

简单地编写您的查询如下:

代码语言:javascript
复制
SELECT 
FilenameId AS id,
Filename.Name AS name
FROM Filename
WHERE name LIKE '%something%'

一般来说,你不能在WHERE子句中访问别名。要么把你的查询放到像Dhinakaran建议的子查询中,要么使用HAVING (如果你懒惰的话)。

区别是:WHERE是基于行的,HAVING在应用WHERE子句(和GROUP BY)后处理结果。

从

以下两条语句说明字符串比较不区分大小写,除非其中一个操作数是二进制字符串:

代码语言:javascript
复制
mysql> SELECT 'abc' LIKE 'ABC';
        -> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
        -> 0
票数 1
EN

Stack Overflow用户

发布于 2013-03-28 18:49:07

创建子查询,然后将where ON子查询

代码语言:javascript
复制
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

或

代码语言:javascript
复制
 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_ci
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15679704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档