0

それで、SQLステートメントを取得しました。アイデアは、大文字と小文字を区別しない LIKE を実行したいということです。私はこのようにします:

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

...しかし、MySQL は喜んで拒否します。

  Unknown column 'iname' in 'where clause'

私は何を間違っていますか?私はMySQL 5.5 FWIWを使用しています。

4

2 に答える 2

1

なぜこれを思いついたのかわかりませんが、通常、他の人はLIKE大文字と小文字を区別するのに苦労していますが、その逆ではありません。

クエリを次のように簡単に記述します。

SELECT 
FilenameId AS id,
Filename.Name AS name
FROM Filename
WHERE name LIKE '%something%'

また、一般に、WHERE 句でエイリアスにアクセスすることはできません。Dhinakaranが提案したようにクエリをサブクエリに入れるか、使用しますHAVING(怠惰な場合)。

違い?WHERE行ベースであり、句 (and )HAVINGを適用した後の結果に作用します。WHEREGROUP BY

マニュアルから:

次の 2 つのステートメントは、オペランドの 1 つがバイナリ文字列でない限り、文字列比較で大文字と小文字が区別されないことを示しています。

mysql> SELECT 'abc' LIKE 'ABC';
        -> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
        -> 0
于 2013-03-28T11:04:32.023 に答える
0

サブクエリを作成し、サブクエリのどこに置く

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_ci
于 2013-03-28T10:49:07.137 に答える