PostgreSQL クエリは次のとおりです。
SELECT * 
FROM rates 
WHERE prefix = (SELECT max(prefix) 
                FROM rates 
                where '914428215151' ~* ('^'||prefix));
MySQL がクラップアウトします~*
MySQLに相当するものは何ですか?
PostgreSQL クエリは次のとおりです。
SELECT * 
FROM rates 
WHERE prefix = (SELECT max(prefix) 
                FROM rates 
                where '914428215151' ~* ('^'||prefix));
MySQL がクラップアウトします~*
MySQLに相当するものは何ですか?
MySQL はRLIKEorREGEXPを正規表現の比較演算子として使用します。
http://dev.mysql.com/doc/refman/5.6/en/regexp.html#operator_regexpを参照してください。
PostgreSQL の~*演算子は大文字と小文字を区別しません。MySQL も同様です。
REGEXPバイナリ文字列で使用する場合を除き、大文字と小文字は区別されません。
もう 1 つの違いは、||文字列連結演算子としての の使用です。場合は、MySQL にその演算子を同じ方法で使用させることができますSET SQL_MODE=PIPES_AS_CONCATが、デフォルトでは論理「or」演算子であるため、次のCONCAT()関数を使用する必要があります。
例:
SELECT * FROM rates WHERE prefix = (
  SELECT MAX(prefix) FROM rates 
  WHERE '914428215151' REGEXP CONCAT('^', prefix));
あなたのコメントについて:
||文字列連結として使用しないでください。機能を使用してくださいCONCAT()。
を使用する場合||は、論理的な「または」です。の結果('^' OR prefix)はtrueで、MySQL では数字の 1 で表されます。正規表現の比較'914428215151' REGEXP '1'は明らかに任意の値と一致するため、表の MAX() 値を返します。
where 句には単純な LIKE を使用します。
SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'