[MySQL] 文字列関数・集約関数

○文字列処理関数

・文字列の長さ(length, char_length)

例)
mysql> select length('abcde') as abcde,
    -> length('あいうえお') as あいうえお,
    -> char_length('あいうえお') as cl_あいうえお;
+-------+------------+---------------+
| abcde | あいうえお | cl_あいうえお |
+-------+------------+---------------+
|     5 |         10 |             5 |
+-------+------------+---------------+

・大文字、小文字の変換(upper または ucase, lower または lcase)
http://www.sql-reference.com/string/upper_lower.htmlも参考

例)
mysql> select upper('abCdE'), lower('abCdE');
+----------------+----------------+
| upper('abCdE') | lower('abCdE') |
+----------------+----------------+
| ABCDE          | abcde          |
+----------------+----------------+

mysql> select ucase('abCdE'), lcase('abCdE');
+----------------+----------------+
| ucase('abCdE') | lcase('abCdE') |
+----------------+----------------+
| ABCDE          | abcde          |
+----------------+----------------+

・文字列から抜き出す(left, right, substring)

例)
mysql> select left('abcde',3) as left3,
    -> right('abcde',2) as right2,
    -> substring('abcde',2,3) as sub2_3;
+-------+--------+--------+
| left3 | right2 | sub2_3 |
+-------+--------+--------+
| abc   | de     | bcd    |
+-------+--------+--------+

○集約(グループ)関数

 集約関数(count, sum, avg, max,min)

(テスト用テーブル)
mysql> select * from test1;
+------+--------+
| id   | moji   |
+------+--------+
|    1 | abc    |
|    2 | abcde  |
|    3 | test1  |
|    4 | test2  |
|    5 | test3  |
|    6 | hoge1  |
|    7 | hoge2  |
|    8 | 1_test |
|    9 | 2_test |
|   10 | NULL   |
+------+--------+

例)
mysql> select count(id), sum(id), avg(length(moji)) from test1;
+-----------+---------+-------------------+
| count(id) | sum(id) | avg(length(moji)) |
+-----------+---------+-------------------+
|        10 |      55 |            5.0000 |
+-----------+---------+-------------------+

●おまけ

“moji”の長さが最大の行を表示しようとしてみたが、

mysql> select * from test1 where length(moji) = max(length(moji));
ERROR 1111 (HY000): Invalid use of group function

エラーが出ました。

原因は、グループ関数は、whereより後に処理されるので、
where処理の時点ではmax(length(moji))の結果がないため。

それをやりたいときは、
先に最大値を調べて、数値で指定すればいいのかな?

mysql> select max(length(moji)) from test1;
+-------------------+
| max(length(moji)) |
+-------------------+
|                 6 |
+-------------------+

mysql> select * from test1 where length(moji) = 6;
+------+--------+
| id   | moji   |
+------+--------+
|    8 | 1_test |
|    9 | 2_test |
+------+--------+

コメントを残す

メールアドレスが公開されることはありません。