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

MySQLでバージョン文字列(x.y.z)を比較する方法は?

    すべてのバージョン番号が次のいずれかに似ている場合:

    X
    X.X
    X.X.X
    X.X.X.X
    

    ここで、Xは0〜255(両端を含む)の整数であり、INET_ATON()を使用できます。 文字列を比較に適した整数に変換する関数。

    ただし、関数を適用する前に、関数の引数がX.X.X.Xであることを確認する必要があります。 必要な量の'.0'を追加してフォームを作成します それに。そのためには、まず. の文字列にはすでに含まれています。これは次のように実行できます:

    CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
    

    つまり、文字列内のピリオドの数は、ストリングの長さからピリオドを削除した後の長さを引いたものです。

    得られた結果は、3から差し引かれます。 そして、'.0'と一緒に 、REPEAT()に渡されます 機能:

    REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
    

    これにより、元のverに追加する必要のあるサブストリングが得られます。 値、X.X.X.Xに準拠する フォーマット。そのため、順番にCONCAT()に渡されます。 verと一緒に機能する 。そして、そのCONCAT()の結果 INET_ATON()に直接渡すことができるようになりました 。最終的に得られるものは次のとおりです。

    INET_ATON(
      CONCAT(
        ver,
        REPEAT(
          '.0',
          3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
        )
      )
    )
    

    そして、これは1つの値のみです! :)他の文字列についても同様の式を作成する必要があります。その後、結果を比較できます。

    参照:



    1. PHPHTML文字列をデータベースに保存する方法

    2. エラー1396(HY000):'user'@'localhost'の操作DROPUSERが失敗しました

    3. PostgreSQL11でのインデックス変更の概要

    4. データベースの値を使用してPHPの2列テーブルを作成するにはどうすればよいですか?