sql >> データベース >  >> RDS >> Mysql

大文字のみを含むすべてのフィールドを選択します

    大文字と小文字を区別する照合 を使用することをお勧めします。 。デフォルトでは大文字と小文字は区別されないと思います。例:

    CREATE TABLE my_table (
       id int,
       name varchar(50)
    ) CHARACTER SET latin1 COLLATE latin1_general_cs;
    
    INSERT INTO my_table VALUES (1, 'SomeThing');
    INSERT INTO my_table VALUES (2, 'something');
    INSERT INTO my_table VALUES (3, 'SOMETHING');
    INSERT INTO my_table VALUES (4, 'SOME4THING');
    

    次に:

    SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    3 | SOMETHING |
    +------+-----------+
    1 row in set (0.00 sec)
    

    テーブル全体で大文字と小文字を区別する照合を使用したくない場合は、 COLLATE @kchauが他の回答で提案されている

    大文字と小文字を区別しない照合を使用してテーブルを試してみましょう:

    CREATE TABLE my_table (
       id int,
       name varchar(50)
    ) CHARACTER SET latin1 COLLATE latin1_general_ci;
    
    INSERT INTO my_table VALUES (1, 'SomeThing');
    INSERT INTO my_table VALUES (2, 'something');
    INSERT INTO my_table VALUES (3, 'SOMETHING');
    INSERT INTO my_table VALUES (4, 'SOME4THING');
    

    これはうまく機能しません:

    SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    1 | SomeThing |
    |    2 | something |
    |    3 | SOMETHING |
    +------+-----------+
    3 rows in set (0.00 sec)
    

    ただし、COLLATEは使用できます 名前フィールドを大文字と小文字を区別する照合に照合する句:

    SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+$';
    +------+-----------+
    | id   | name      |
    +------+-----------+
    |    3 | SOMETHING |
    +------+-----------+
    1 row in set (0.00 sec)
    


    1. テキスト表現の16進数を10進数に変換します

    2. 動的列を使用したMySQLピボットテーブルクエリ

    3. Dockerの更新後、MacOSのDockerコンテナでMysqlが起動しない

    4. Windowsでmysql画面コンソールをクリアする方法は?