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

SQLで数値を含む文字列列を並べ替えますか?

    仮定に進む これは常にWORD_space_NUMBERで機能するはずです:

    SELECT   *
    FROM     table
    ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)
    

    位置 を使用します スペースを見つけるには、 SUBSTRING その後の番号を取得し、 CAST 同等の値にするためです。

    列に別のパターンがある場合は、お知らせください。より適切な回避策を考案するよう努めます。

    編集 動作することが証明されています:

    mysql> INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11');
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * FROM t ORDER BY st;
    +----+------+
    | id | st   |
    +----+------+
    |  1 | a 1  |
    |  4 | a 11 |
    |  2 | a 12 |
    |  3 | a 6  |
    +----+------+
    4 rows in set (0.00 sec)
    
    mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
    +----+------+
    | id | st   |
    +----+------+
    |  1 | a 1  |
    |  3 | a 6  |
    |  4 | a 11 |
    |  2 | a 12 |
    +----+------+
    
    mysql> INSERT INTO t (st) VALUES ('b 1'),('b 12'),('b 6'),('b 11');
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
    +----+------+
    | id | st   |
    +----+------+
    |  1 | a 1  |
    |  5 | b 1  |
    |  3 | a 6  |
    |  7 | b 6  |
    |  4 | a 11 |
    |  8 | b 11 |
    |  2 | a 12 |
    |  6 | b 12 |
    +----+------+
    8 rows in set (0.00 sec)
    
    mysql> SELECT * FROM t ORDER BY LEFT(st,LOCATE(' ',st)), CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
    +----+------+
    | id | st   |
    +----+------+
    |  1 | a 1  |
    |  3 | a 6  |
    |  4 | a 11 |
    |  2 | a 12 |
    |  5 | b 1  |
    |  7 | b 6  |
    |  8 | b 11 |
    |  6 | b 12 |
    +----+------+
    8 rows in set (0.00 sec)
    

    私の不完全なテーブル/列名を無視しますが、正しい結果が得られます。また、もう少し進んで、文字の接頭辞を数字で区切るために二重ソートを追加しました。

    編集 SUBSTRING_INDEX 少し読みやすくなります。

    ORDER BY SUBSTRING_INDEX(st, " ", 1) ASC, CAST(SUBSTRING_INDEX(st, " ", -1) AS SIGNED)
    


    1. .sqlファイルの内容をRスクリプトに読み込んでクエリを実行するにはどうすればよいですか?

    2. Oracle12.2シャーディング

    3. Oracleによるページング

    4. 純粋なmysqlでこれを解決できますか? (列の''で区切られた値に参加します)